版本:
┌─[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
注意看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来说明
通过第一条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,到底哪个是正确的?
┌─[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