本文共 6498 字,大约阅读时间需要 21 分钟。
版本:
┌─[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/sdbNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsdb 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: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks65536 inodes, 262144 blocks13107 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=2684354568 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): doneWriting superblocks and filesystem accounting information: done┌─[root@tp]─[~]─[2+1]─[100%=]└─# tune2fs -l /dev/sdb1 | grep ^BlockBlock count: 262144Block size: 4096Blocks 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://mitai.baihongyu.com/