rh436 - Linux下如何根据fdisk/tune2fs -l/dumpe2fs来计算分区的大小

版本:

┌─[root@tp]─[~]─[2+1]─[100%=]
└─# cat /proc/version
Linux version 3.7.9-2-ARCH (tobias@T-POWA-LX) (gcc version 4.7.2 (GCC) ) #1 SMP PREEMPT Mon Feb 25 12:04:25 CET 2013


用fdisk来计算分区大小
┌─[root@tp]─[~]─[2+1]─[100%=]
└─# fdisk -l /dev/sdb

Disk /dev/sdb: 32.5 GB, 32457621504 bytes, 63393792 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6f20736b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200    63393791    30647296   83  Linux

注意看Units这行,这里表示下面列出来的Start和End的单位是1扇区,每扇区的大小是512字节。

有此我们可以计算出sdb1的大小为:(2099199-2048)*512/1024/1024/1024=0.99GB

sdb2的大小为:(63393791-2099200)*512/1024/1024/1024=29.22GB

这里为什么不用Blocks数来计算大小,我们后面会再分析。


用tune2fs -l/dumpe2fs来计算分区大小

由于tune2fs -l和dumpe2fs得到的信息基本一致,所以这里仅用tune2fs -l来说明

┌─[✗]─[root@tp]─[~]─[2+1]─[100%=]
└─# tune2fs -l /dev/sdb1
tune2fs 1.42.7 (21-Jan-2013)
Filesystem volume name:   <none>
Last mounted on:          /run/media/liao/84f37106-5f5c-4737-8745-f016459ba3cd
Filesystem UUID:          84f37106-5f5c-4737-8745-f016459ba3cd
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              327680
Block count:              1310720
Reserved block count:     65536
Free blocks:              1176864
Free inodes:              315435
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      319
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Filesystem created:       Sun Jan 20 18:59:00 2013
Last mount time:          Wed May  8 00:41:42 2013
Last write time:          Wed May  8 00:41:54 2013
Mount count:              14
Maximum mount count:      -1
Last checked:             Sun Jan 20 18:59:00 2013
Check interval:           0 (<none>)
Lifetime writes:          1044 kB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:              256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      39ec016d-c1a6-4f04-b9e0-2e8570d134e7
Journal backup:           inode blocks
┌─[root@tp]─[~]─[2+1]─[100%=]
└─# tune2fs -l /dev/sdb2
tune2fs 1.42.7 (21-Jan-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          cd935c98-6f71-42cf-96dd-39bcc2b805b6
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1916928
Block count:              7661824
Reserved block count:     383091
Free blocks:              7530267
Free inodes:              1916917
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1022
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Wed May  8 00:42:49 2013
Last mount time:          Wed May  8 00:44:25 2013
Last write time:          Wed May  8 00:44:25 2013
Mount count:              1
Maximum mount count:      -1
Last checked:             Wed May  8 00:42:49 2013
Check interval:           0 (<none>)
Lifetime writes:          4269 kB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:              256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      fe20ea0b-06bf-4e13-88a6-e1f191af6230

通过第一条tune2fs命令,得出sdb1的大小:(1310720*4096)/1024/1024/1024=5.00GB

通过第二条tune2fs命令,得出sdb2的大小:(7661824*4096)/1024/1024/1024=29.22GB

到这里我们发现对于sdb2,我们通过fdisk和tune2fs计算出来的结果是一样的,

但是对于sdb1,fdisk得出0.99GB,而tune2fs确得出5.00GB,到底哪个是正确的?


还是让我们通过lsblk来验证一下吧

┌─[root@tp]─[~]─[2+1]─[100%=]
└─# lsblk /dev/sdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   1 30.2G  0 disk
├─sdb1   8:17   1    1G  0 part
└─sdb2   8:18   1 29.2G  0 part /run/media/liao/cd935c98-6f71-42cf-96dd-39bcc2b805b6
┌─[root@tp]─[~]─[2+1]─[100%=]
└─#

可以看出lsblk得到的结果与fdisk一致。


为什么tune2fs算出的结果有问题?让我们再仔细看看sdb1和sdb2

┌─[✗]─[root@tp]─[~]─[2+1]─[100%=]
└─# blkid | grep sdb
/dev/sdb1: UUID="84f37106-5f5c-4737-8745-f016459ba3cd" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdb2: UUID="cd935c98-6f71-42cf-96dd-39bcc2b805b6" TYPE="ext4"
┌─[root@tp]─[~]─[2+1]─[100%=]
└─# mount /dev/sdb1 /mnt/
mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail or so
┌─[✗]─[root@tp]─[~]─[2+1]─[100%=]
└─# mount /dev/sdb2 /mnt/
┌─[root@tp]─[~]─[2+1]─[100%=]
└─# umount /mnt/
┌─[root@tp]─[~]─[2+1]─[100%=]
└─#

blkid显示sdb1是ext3文件系统,但是却挂载不上,这是什么原因?

其实是因为原先我在这个U盘上建过分区,当时给了sdb1 5GB空间,格式化成了ext3。

这次我把这个U盘重新分区了,sdb1只给了1GB空间,但是尚未格式化。剩下的给了sdb2,已经格式化成了ext4。

对于sdb1, 虽然经过了重新分区,但是由于尚未格式化,tune2fs读到了原先文件系统上的信息,

而对于sdb2, tune2fs读到了最新的文件系统信息,所以给出正确的信息。


竟然如此,不如我们重新格式化一下sdb1, 是不是tune2fs就能得到最新的文件系统信息了呢?

┌─[root@tp]─[~]─[2+1]─[100%=]
└─# mkfs.ext4 /dev/sdb1
mke2fs 1.42.7 (21-Jan-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

┌─[root@tp]─[~]─[2+1]─[100%=]
└─# tune2fs -l /dev/sdb1 | grep ^Block
Block count:              262144
Block size:               4096

Blocks per group:         32768
┌─[root@tp]─[~]─[2+1]─[100%=]
└─# blkid | grep sdb
/dev/sdb1: UUID="b6f7f234-2aef-4e23-9cca-d6f0c4189497" TYPE="ext4"
/dev/sdb2: UUID="cd935c98-6f71-42cf-96dd-39bcc2b805b6" TYPE="ext4"


我们再来计算下sdb1的大小:262144*4096/1024/1024/1024=1.00GB

现在可以看到已经和根据fdisk计算出的结果一致了。


回过头来看看用fdisk根据tune2fs -l得到的block size计算出的大小

sdb1:1048576*4096/1024/1024/1024=4.00GB=4 * 1GB

sdb2:30647296*4096/1024/1024/1024=116.91GB=4 * 29.22GB

我们发现结果恰好是fdisk根据扇区大小得出值的4倍,这是因为tune2fs -l给出的是文件系统的block size,一般会随着不同的文件系统发生变化,而且可以在格式化的时候通过“-b”参数指定,如ext3/ext4文件系统默认的block size是4096bytes。而fdisk则是用硬件层次的block size,一般都是1024bytes,所以把结果除以4就得到正确结果了。



REF:

1. Linux disk block size...help please

http://www.linuxforums.org/forum/miscellaneous/5654-linux-disk-block-size-help-please.html

你可能感兴趣的:(rh436 - Linux下如何根据fdisk/tune2fs -l/dumpe2fs来计算分区的大小)