为什么我的分区在 4096 字节物理块硬盘上没有显示正确的容量?

为什么我的分区在 4096 字节物理块硬盘上没有显示正确的容量?

在阅读了很多关于为什么较新的 4096 字节物理块硬盘驱动器应该分区并注意对齐的内容后(4KB 扇区磁盘上的 Linux:实用建议,什么是分区对齐以及为什么需要它?,为什么我必须“对齐”我的新 Western Digital 硬盘上的分区?,我确信要确保我的新磁盘已正确分区并格式化为 4096 字节块。

所以我使用它对其进行了分区fdisk -b 4096 /dev/sdb,并为 指定了 50GB 大小sdb1,为 412GBsdb2指定了剩余空间sdb3(sdb3 为 3.8GB),得到了以下分区表:

    Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 7600 cylinders, total 122096646 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x1c7f9c20

       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1   *         256    13107455    52428800   83  Linux
    /dev/sdb2        13107456   121110783   432013312   83  Linux
    /dev/sdb3       121110784   122096645     3943448   82  Linux swap

然后我用 ext4 格式化了sdb1sdb2

# mkfs.ext4 /dev/sdb1 
mke2fs 1.42.4 (12-June-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
409600 inodes, 1638400 blocks
81920 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1677721600
50 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

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

# mkfs.ext4 /dev/sdb2 
mke2fs 1.42.4 (12-June-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3375104 inodes, 13500416 blocks
675020 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
412 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424

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

并设置交换区域:

# mkswap /dev/sdb3
Setting up swapspace version 1, size = 492924 KiB
no label, UUID=2d18a027-6c03-4b29-b03e-c0c7f61413c5

我注意到的第一件奇怪的事情是报告的交换大小仅为 492924 KiB。然后,在安装新格式化的分区后,我发现它们看起来比应有的小得多:

Filesystem                        Size  Used Avail Use% Mounted on
/dev/sdb1                         6.3G  222M  5.8G   4% /mnt/zip
/dev/sdb2                          52G  907M   48G   2% /mnt/memory

为什么会发生这种情况?有什么办法可以纠正这个问题吗?

编辑:

在 @Alexios 建议后,我尝试重新启动,但 /proc/partitions 没有改变。 /dev/sda 和 /dev/sdb 都是相同的 500GB 驱动器,但 /dev/sda 我格式化为未对齐(使用从扇区 63 之后开始的默认 512 字节扇区大小)和 /dev/sdb 对齐(使用从扇区 255 之后开始的 4096 扇区大小) )。正如我们所看到的,系统认为 /dev/sdb 的块数比 /dev/sda 少,尽管两者的分区大小相同:

# cat /proc/partitions 
major minor  #blocks  name

  11        0    4590208 sr0
   8        0  488386584 sda
   8        1   48829536 sda1
   8        2  437498145 sda2
   8        3    2058871 sda3
   8       16  488386584 sdb
   8       17    6553600 sdb1
   8       18   54001664 sdb2
   8       19     492931 sdb3

答案1

所发生的情况是,这个-b开关是无稽之谈,甚至不应该存在。 MBR 中记录的扇区号始终以驱动器逻辑扇区大小(512 字节)为单位进行解释。通过使用该-b开关,您将导致 fdisk 将其记录的所有扇区除以 8,因此内核将分区解释为您预期大小的 1/8。

如果您使用parted而不是fdisk,它将确保您的分区自动正确对齐。使用 时fdisk,只需确保起始扇区是 8 的倍数即可。

相关内容