如何正确对齐分区表?


19

我正在构建我的第一个RAID5阵列。我已经使用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个字节”该怎么办。以及如何正确分区磁盘以匹配它们,以便我可以对其进行正确格式化。

Answers:


17

由于对齐在很多地方都会弹出-

  • 具有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
<select primary/secondary and partition #>
first sector: 2048 
  # 2048 is default in recent fdisk, 
  # and is compatible with Vista and Win 7, 
  # 4k-sector disks and all common RAID stripe sizes

对齐文件系统

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

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

在OP中,mkfs显然可以自动检测到最佳设置,因此无需采取进一步措施。

如果要验证,对于RAID,相关参数为:

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

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

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

  • fs块大小(例如4096)
  • SSD擦除块大小(例如128k)
  • 条带宽度:擦除块大小/ fs块大小(例如128k / 4k = 32)

摘自Theodore的SSD帖子

对齐LVM范围

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

有关解决方法,请参见Theodore的文章


@Marco怎么样?第一个,对于IBM Developer Works来说,甚至有一个基准图,显示使用未对齐分区时写入性能的损失,以及RAID上的侧边栏。自从我写这篇文章以来,Tso的博客文章关于SSD对齐至少移动了两次。再次更新了链接,但不能保证它将继续工作。
jg-faustus

SSD上的替代链接:对齐SSD分区
jg-faustus

8

我的一个朋友指出,我可以直接对mkfs.ex4 /dev/md1进行分区,而无需对任何分区进行分区,因此我删除了分区并进行了分区,它现在似乎正在格式化。


6

我发现这种方式是最简单的

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

或其他肮脏的方法只会像这样

(parted) mkpart primary ext4 1 -1

如果希望允许parted尝试自动优化分区,则分篇文档建议使用MB和GB,而不是MiB或GiB。
费利佩·阿尔瓦雷斯

1

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

如今,大多数分区工具默认都会使用1 MiB边界(fdisk可能不会)。

原因是大多数硬盘和SSD在设备上使用的逻辑扇区远大于逻辑扇区。结果是,如果您从磁盘读取512字节的逻辑扇区,则硬件实际上必须读取大量的数据。

对于您的软件RAID设备,会发生类似的情况:其数据以默认mdadm设置存储在64 KiB的“块”中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.