如何正确对齐分区表?

如何正确对齐分区表?

我正在构建我的第一个 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 字节。”以及如何正确对磁盘进行分区以匹配,以便我可以正确格式化它。

答案1

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

  • 具有 4k 块的“高级格式化”硬盘
  • 固态硬盘
  • 袭击
  • 逻辑卷管理器

- 我将稍微详细阐述一下这个问题。

对齐分区

“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 擦除块大小对齐(Theodore Tso,Linux 内核开发人员)。

在 OP 帖子中mkfs显然自动检测了最佳设置,因此无需采取进一步的行动。

如果你想验证,袭击相关参数为:

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

Linux 突袭 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 的帖子寻求解决方法。

答案2

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

答案3

我觉得这是最简单的方法

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

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

(parted) mkpart primary ext4 1 -1

答案4

似乎 mkfs.ext4 想要 RAID 上的文件系统从 64 KiB 边界开始。如果您使用整个磁盘,它将从 0 开始,这当然也是 64 KiB 的倍数...

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

原因是大多数硬盘和 SSD 使用的物理扇区比逻辑扇区大得多。结果是,如果您从磁盘读取 512 字节的逻辑扇区,硬件实际上必须读取大量数据。

如果您的软件 RAID 设备也会出现类似的情况:其中的数据以默认的 mdadm 设置存储在 64 KiB 的“块”中。

相关内容