如何正确对齐分区表?

我正在构建我的第一个RAID5arrays。 我用mdadm创建了以下设置:

root@bondigas:~# mdadm --detail /dev/md1 /dev/md1: Version : 00.90 Creation Time : Wed Oct 20 20:00:41 2010 Raid Level : raid5 Array Size : 5860543488 (5589.05 GiB 6001.20 GB) Used Dev Size : 1953514496 (1863.02 GiB 2000.40 GB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 1 Persistence : Superblock is persistent Update Time : Wed Oct 20 20:13:48 2010 State : clean, degraded, recovering Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 64K Rebuild Status : 1% complete UUID : f6dc829e:aa29b476:edd1ef19:85032322 (local to host bondigas) Events : 0.12 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 4 8 64 3 spare rebuilding /dev/sde 

在这种情况下,我决定使用以下命令格式化野兽:

 root@bondigas:~# mkfs.ext4 /dev/md1p1 mke2fs 1.41.11 (14-Mar-2010) /dev/md1p1 alignment is offset by 63488 bytes. This may result in very poor performance, (re)-partitioning suggested. Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=16 blocks, Stripe width=48 blocks 97853440 inodes, 391394047 blocks 19569702 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 11945 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, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Writing inode tables: ^C 27/11945 root@bondigas:~# ^C 

我不确定如何处理“/ dev / md1p1对齐偏移63488字节。” 以及如何正确分区磁盘以匹配,以便我可以正确格式化它。

由于对齐在很多地方出现 –

  • 具有4k块的“高级格式化”硬盘
  • 固态硬盘
  • 袭击
  • LVM

– 我会在这个问题上稍微扩展一下。

对齐分区

“4kB扇区磁盘上的Linux” (IBM developerWorks)介绍了fdisk,parted和GPT fdisk的步骤。

使用fdisk:

 sudo fdisk /dev/XXX c # turn off DOS compatibility u # switch to sector units p # print current partitions, check that start sectors are multiples of 8 # for a new partition: n # new partition  

对齐文件系统

这主要与RAID相关(级别0,5和6;不是级别1); 如果在了解条带大小的情况下创建文件系统,则文件系统的性能会更好。

如果您希望将文件系统与SSD擦除块大小对齐 (Theodore Tso,Linux内核开发人员),它也可以用于SSD。

在OPpost中, mkfs显然自动检测到了最佳设置,因此无需进一步操作。

如果您想validation,对于RAID ,相关参数是:

  • 块大小(文件系统块大小,例如4096)
  • 条带大小(与mdadm块大小相同,例如64k)
  • 步幅: stripe size / block size (例如64k / 4k = 16)
  • stripe-width: stride * #-of-data-disks (例如4个磁盘,RAID 5是3个数据磁盘; 16 * 3 = 48)

来自Linux Raid Wiki 。 另请参阅此简单计算器,了解不同的RAID级别和磁盘数量。

对于SSD擦除块对齐 ,参数为:

  • 块大小(例如4096)
  • SSD擦除块大小(例如128k)
  • stripe-width:erase-block-size / fs-block-size (例如128k / 4k = 32)

来自Theodore的SSDpost 。

对齐LVM范围

潜在的问题是LVM创建了一个192k的头。 这是4k的倍数(因此4k块磁盘没有问题)但可能不是RAID条带大小的倍数(如果LVM在RAID上运行)或SSD擦除块大小(如果LVM在SSD上运行)。

请参阅Theodore的post了解解决方法。

我的一个朋友指出我可以直接在/dev/md1上使用mkfs.ex4而不对任何内容进行分区,所以我删除了分区并执行了该操作,现在它似乎是格式化。

我发现这种方式最简单

 parted -a opt /dev/md0 (parted) u MiB (parted) rm 1 (parted) mkpart primary 1 100% 

或者另一种脏方法就是这样

 (parted) mkpart primary ext4 1 -1 

似乎mkfs.ext4希望RAID上的文件系统在64 KiB边界上启动。 如果您使用整个磁盘,它从0开始,当然也是64 KiB的倍数…

现在大多数分区工具默认使用1 MiB边界(fdisk可能不会)。

这样做的原因是大多数硬盘和固态硬盘在设备上使用比逻辑扇区大得多的虚拟扇区。 结果是,如果从磁盘读取512字节的逻辑扇区,硬件实际上必须读取更大量的数据。

如果你的软件RAID设备发生了类似的事情:它上面的数据以64 KiB的“块”存储,并带有默认的mdadm设置。