LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1148|回复: 4

EXT4的磁盘空间占用是怎么计算的?[基本解决,又是du的问题..]

[复制链接]
发表于 2009-12-17 23:27:44 | 显示全部楼层 |阅读模式
我真晕菜了..

本来机器上的有一个Media文件夹,du -sh 查看,占用空间97G,在一个EXT4格式的分区。
晚上把这个文件夹临时copy到移动硬盘,移动硬盘也格式化成EXT4,拷完了发现他在移动硬盘上只要占用95G,我以为漏拷了东西,查看两边文件数量,完全一致,用rsync再同步一次,rsync什么都没复制过去,检查下就退出了。
好了,就算他全拷过去了吧。

然后过一个小时把这些数据从移动硬盘copy回来,期间对移动硬盘没有任何操作..
copy回来后du -sh,占了115G,文件数量一致,rsync检查也没问题!


谁遇到这种问题了? ,今天太晚了,明天有时间给所有文件作个hash,我就不信邪了,拷两遍他还能附送个电影?
 楼主| 发表于 2009-12-17 23:32:07 | 显示全部楼层
忘说了,copy到移动硬盘上后就把原文件夹删了,还重启了机器,
现在重启几次了,他就是占用115G,气死我了,本来空间就不够...


  1. lorelei ~ # rsync -av --delete /mnt/iso/Media /data/data/
  2. sending incremental file list
  3. sent 70774 bytes  received 227 bytes  142002.00 bytes/sec
  4. total size is 123125005248  speedup is 1734130.58
  5. lorelei ~ # du -sh /data/data/Media/
  6. 115G        /data/data/Media/
  7. lorelei ~ # du -sh /mnt/iso/Media/
  8. 95G        /mnt/iso/Media/
  9. lorelei ~ # dumpe2fs /dev/sda4 | head -n 50
  10. dumpe2fs 1.41.9 (22-Aug-2009)
  11. Filesystem volume name:   <none>
  12. Last mounted on:          /data
  13. Filesystem UUID:          3af31210-1352-4675-abbc-d619c9abd2d7
  14. Filesystem magic number:  0xEF53
  15. Filesystem revision #:    1 (dynamic)
  16. Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
  17. Filesystem flags:         signed_directory_hash
  18. Default mount options:    (none)
  19. Filesystem state:         clean
  20. Errors behavior:          Continue
  21. Filesystem OS type:       Linux
  22. Inode count:              12697600
  23. Block count:              50777448
  24. Reserved block count:     2538872
  25. Free blocks:              15827686
  26. Free inodes:              12673812
  27. First block:              0
  28. Block size:               4096
  29. Fragment size:            4096
  30. Reserved GDT blocks:      1011
  31. Blocks per group:         32768
  32. Fragments per group:      32768
  33. Inodes per group:         8192
  34. Inode blocks per group:   512
  35. Flex block group size:    16
  36. Filesystem created:       Tue Nov 24 18:12:48 2009
  37. Last mount time:          Thu Dec 17 22:26:13 2009
  38. Last write time:          Thu Dec 17 22:26:13 2009
  39. Mount count:              108
  40. Maximum mount count:      38
  41. Last checked:             Tue Nov 24 18:12:48 2009
  42. Check interval:           15552000 (6 months)
  43. Next check after:         Sun May 23 18:12:48 2010
  44. Lifetime writes:          453 GB
  45. Reserved blocks uid:      0 (user root)
  46. Reserved blocks gid:      0 (group root)
  47. First inode:              11
  48. Inode size:                  256
  49. Required extra isize:     28
  50. Desired extra isize:      28
  51. Journal inode:            8
  52. Default directory hash:   half_md4
  53. Directory Hash Seed:      3d83434c-477f-48d8-9f81-86d32c0da7e4
  54. Journal backup:           inode blocks
  55. Journal size:             128M
  56. Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
  57.   Checksum 0x971f, unused inodes 0
  58.   Primary superblock at 0, Group descriptors at 1-13
  59. lorelei ~ # dumpe2fs /dev/sdb1 | head -n 50
  60. dumpe2fs 1.41.9 (22-Aug-2009)
  61. Filesystem volume name:   <none>
  62. Last mounted on:          /mnt/iso
  63. Filesystem UUID:          20909507-8cf9-4d9b-bd7b-646baee43a7e
  64. Filesystem magic number:  0xEF53
  65. Filesystem revision #:    1 (dynamic)
  66. Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
  67. Filesystem flags:         signed_directory_hash
  68. Default mount options:    (none)
  69. Filesystem state:         clean
  70. Errors behavior:          Continue
  71. Filesystem OS type:       Linux
  72. Inode count:              7331840
  73. Block count:              29304560
  74. Reserved block count:     1465228
  75. Free blocks:              3904780
  76. Free inodes:              7329502
  77. First block:              0
  78. Block size:               4096
  79. Fragment size:            4096
  80. Reserved GDT blocks:      1017
  81. Blocks per group:         32768
  82. Fragments per group:      32768
  83. Inodes per group:         8192
  84. Inode blocks per group:   512
  85. Flex block group size:    16
  86. Filesystem created:       Thu Dec 17 17:16:51 2009
  87. Last mount time:          Thu Dec 17 23:34:14 2009
  88. Last write time:          Thu Dec 17 23:34:14 2009
  89. Mount count:              4
  90. Maximum mount count:      38
  91. Last checked:             Thu Dec 17 17:16:51 2009
  92. Check interval:           15552000 (6 months)
  93. Next check after:         Tue Jun 15 17:16:51 2010
  94. Lifetime writes:          101 GB
  95. Reserved blocks uid:      0 (user root)
  96. Reserved blocks gid:      0 (group root)
  97. First inode:              11
  98. Inode size:                  256
  99. Required extra isize:     28
  100. Desired extra isize:      28
  101. Journal inode:            8
  102. Default directory hash:   half_md4
  103. Directory Hash Seed:      8f665176-66a6-4f93-8628-76d2ae361e56
  104. Journal backup:           inode blocks
  105. Journal size:             128M
  106. Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
  107.   Checksum 0x9646, unused inodes 8180
  108.   Primary superblock at 0, Group descriptors at 1-7
  109. lorelei ~ #
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-12-17 23:34:16 | 显示全部楼层
du -bsh看一下,du全称disk usage,并不一定等于文件实际尺寸,实际占用空间受块尺寸、文件空洞数量、是否压缩等很多因素影响
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-17 23:51:16 | 显示全部楼层
  1. lorelei ~ # du -bsh /mnt/iso/Media/
  2. 115G        /mnt/iso/Media/
复制代码

楼上厉害 - -

不过这下我更不明白了,显然是加了-b之后的错了,我移动硬盘没这么大,标称120G的硬盘,格式化后只有111G..


他是怎样统计的,才造成了这么大的误差呢..?
回复 支持 反对

使用道具 举报

发表于 2009-12-18 08:57:26 | 显示全部楼层
这是gnu coreutils du的一个老问题了。首先在一个目录下执行du它会计算目录结构所占据空间("."文件)。另外不加-b选项它会用sb.st_blocks(512块数)*512来当成一个文件的实际尺寸,加-b选项就用sb.st_size(实际尺寸),显然前者在多数情况下会偏大,少数情况(例如文件空洞,所谓的稀疏文件或者压缩)会偏小。
如果想准确计算字节数,可以用du -bshc *这种写法,最后给出的统计是全部文件stat64.st_size字段的总和,偏差应该不会太大。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表