Original article: http://kbase.redhat.com/faq/docs/DOC-2893.pdf
Translated by Ivan Pesin, June 2009
Система: Red Hat Enterprise Linux 3, Red Hat Enterprise Linux 4, Red Hat Enterprise Linux 5
Решение:
RAID уровней 0, 4, 5 и 6 для записи на разные диски, разбивает данные на большие блоки — “полосы”, обычно по 64KB. Выравнивание разделов и файловых систем в соответствии с размером этих полос может повысить производительность, в частности, программ, которые используют прямой ввод/вывод.
Программа fdisk создаёт разделы, выровненные по границам цилиндров, в соответствии с исторической геометрией “цилиндр/дорожка/сектор” (cylinder/head/sector, C/H/S). Это позволяет обеспечить максимальную совместимость с другими операционными системами и утилитами. К сожалению, такая геометрия обычно не соответствует размеру полосы RAID-массива. Если доступ к RAID будет осуществляться только операционными системами и утилитами, полностью поддерживающими логическую адресацию блоков (Logical Block Addressing, LBA), то необходимость в выравнивании по геометрии C/H/S отпадает, а с помощью программы parted можно выровнять разделы под полосы RAID-массива.
Внимание: все приводимые здесь примеры уничтожают существующие разделы и файловые системы. Применяйте их только для создания новых файловых систем.
Пример 1: выровненный по границе цилиндра раздел, созданный утилитой fdisk
на диске /dev/sdb
.
1234567891011121314151617181920212223242526272829303132333435363738394041 [root@localhost ~]# fdisk /dev/sdbDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel. Changes will remain in memory only,until you decide to write them. After that, of course, the previouscontent won't be recoverable.The number of cylinders for this disk is set to 60799.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2 FDISK)Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)Command (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-60799, default 1):Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-60799, default 60799):Using default value 60799Command (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.[root@localhost ~]# parted -s /dev/sdb unit s printModel: APPLE Xserve RAID (scsi)Disk /dev/sdb: 976748543sSector size (logical/physical): 512B/512BPartition Table: msdosNumber Start End Size Type File system Flags1 63s 976735934s 976735872s primary[root@localhost ~]#
Parted показывает, что fdisk создал раздел, начиная с 63-сектора (32,256 байта) тома, что совместимо с геометрией C/H/S, но не оптимально для RAID. Поскольку RAID использует полосы размером 64KB, начало раздела должно быть сдвинуто на сектор 128. Начинать раздел с нулевого сектора нельзя, поскольку будет перезаписана таблица разделов. Большинство RAID-массивов используют сектора размером 512 байт, но возможны сектора и большего размера.
Примечание: По-умолчанию, parted использует в единицах размера легко читаемые сокращения системы СИ (степени числа 10). Поскольку они редко совпадают со степенями числа 2, parted нужно перевести в режим работы с секторами (unit s), перед тем как проверять или задавать выравнивание разделов по секторам.
Пример 2: удалите раздел /dev/sdb1
и создайте его заново, начиная с сектора 128.
1234567891011121314151617181920212223242526272829 [root@localhost ~]# parted /dev/sdbGNU Parted 1.8.1Using /dev/sdbWelcome to GNU Parted! Type 'help' to view a list of commands.(parted) unit s(parted) printModel: APPLE Xserve RAID (scsi)Disk /dev/sdb: 976748543sSector size (logical/physical): 512B/512BPartition Table: msdosNumber Start End Size Type File system Flags1 63s 976735934s 976735872s primary(parted) rm 1(parted) mkpart primary 128 976735934(parted) printModel: APPLE Xserve RAID (scsi)Disk /dev/sdb: 976748543sSector size (logical/physical): 512B/512BPartition Table: msdosNumber Start End Size Type File system Flags1 128s 976735934s 976735807s primary(parted) quit[root@localhost ~]#
Примечание: Команды move
и resize
утилиты parted пытаются сохранить содержимое файловой системы раздела. Если в разделе нет файловой системы, то эти команды откажутся работать.
Выровненная файловая система ext3 может быть создана на выровненном разделе или на логическом томе, состоящем из выровненных физических томов. LVM не влияет на выравнивание, если размер физического экстента, превосходит размер блока RAID. Обычно размер RAID блока равен 64KB, а размер физического экстента — 4MB.
Команда mke2fs
принимает параметр stride, который позволяет оптимизировать размещение метаданных файловой системы для RAID-массивов. Параметр задаётся в блоках файловой системы, которые в большинстве случаев равняются 4KB. Чтобы избежать возможных неточностей и гарантировать правильность вычислений, лучше всего его задать явно.
Пример 3: создайте файловую систему ext3 на /dev/sdb1
, оптимизированную для RAID с размером блока 64KB.
12345678910111213141516171819202122232425 [root@localhost ~]# mke2fs -j -b 4096 -E stride=16 /dev/sdb1mke2fs 1.39 (29-May-2006)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)61046784 inodes, 122091975 blocks6104598 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=42949672963726 block groups32768 blocks per group, 32768 fragments per group16384 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,102400000Writing inode tables: doneCreating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 32 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.[root@localhost ~]#