Система: 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
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
[root@localhost ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content 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): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-60799, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-60799, default 60799): Using default value 60799 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# parted -s /dev/sdb unit s print Model: APPLE Xserve RAID (scsi) Disk /dev/sdb: 976748543s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
[root@localhost ~]# parted /dev/sdb GNU Parted 1.8.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) unit s (parted) print Model: APPLE Xserve RAID (scsi) Disk /dev/sdb: 976748543s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 63s 976735934s 976735872s primary (parted) rm 1 (parted) mkpart primary 128 976735934 (parted) print Model: APPLE Xserve RAID (scsi) Disk /dev/sdb: 976748543s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
[root@localhost ~]# mke2fs -j -b 4096 -E stride=16 /dev/sdb1 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 61046784 inodes, 122091975 blocks 6104598 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 3726 block groups 32768 blocks per group, 32768 fragments per group 16384 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 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 32 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@localhost ~]# |