У меня типичный небольшой офисный сервер с двумя жесткими дисками, настроенными для RAID-1 (зеркалирование). У каждого диска есть несколько разделов: один для раздела подкачки, другие разделены на несколько массивов / dev / mdX.
Каждые пару лет один из дисков умирает и заменяется. Замена обычно происходит примерно так:
# copy partition table from the remaining good disk to the empty replacement disk
# (instead of /dev/good_disk and /dev/new_disk I use /dev/sda and /dev/sdb, as appropriate)
sfdisk -d /dev/good_disk | sfdisk /dev/new_disk
# install boot loader
grub-install /dev/new_disk
# create swap partition reusing the same UUID, so I don't need to edit /etc/fstab
mkswap /dev/new_disk1 -U xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# hot-add the new partitions to my RAID arrays
mdadm /dev/md0 -a /dev/new_disk2
mdadm /dev/md1 -a /dev/new_disk5
mdadm /dev/md2 -a /dev/new_disk6
mdadm /dev/md3 -a /dev/new_disk7
mdadm /dev/md4 -a /dev/new_disk8
Диски были первоначально разделены с помощью cfdisk еще в 2009 году, и поэтому таблица разделов традиционно выравнивается по границам цилиндров (255 головок * 63 секторов). Это не оптимальная конфигурация для новых 4K-секторных накопителей.
У меня вопрос: как я могу создать набор разделов для нового диска и убедиться, что они правильно выровнены и имеют правильные размеры для моих RAID-массивов (я полагаю, округление вверх приемлемо, но округление явно не )?
Я просто должен был заменить зеркало в одном из моих массивов сегодня, и я решил просто fdisk замена вместо того, чтобы использовать sfdisk. Так как я знаю размеры раздела (его всего один, в моем случае), и я пошел с более крупным диском для замены.
Исходный RAID1 пары ST31500341AS, и замещающий диск является ST2000DL003.
Так, что я сделал был:
mdadm /dev/md6 --fail /dev/sde1
mdadm /dev/md6 --remove /dev/sde1
fdisk /dev/sde
Это приводит к новому разделу с запуском 2048 и конец 3907029167 - для 1 953 513 560 блоков (или 244189195 в 4k блоках) 3907028904 - для 1 953 513 428 блоков (244189178 в 4k блоках). Старый раздел был запуском 63 и конец 2930272064 с 1 465 136 001 блоком. Я думаю, что lvm заботится о том, чтобы быть выровненного пространства, таким образом, это должно все быть хорошо.
Забыл, что я не могу пойти полностью в конец диска, иначе mdadm переключится на использование целого диска, а не раздела на перезагрузке. LVM, кажется, терпит этот сдвиг, но помещение файловой системы непосредственно на MD не сделало. Рекомендация состояла в том, чтобы сократить раздел по крайней мере 256 секторами, таким образом, я сделал (3907029167-256)/8*8 в bc
добираться 3907028904. Получающийся раздел ультрасовременен 8 == 0, и короткий 263 секторами. Эта проблема получила меня, когда я сделал это для другого массива :(
mdadm /dev/md6 --add /dev/sde1
наблюдайте, что массив восстанавливает. Кажется, восстанавливает на довольно хорошей скорости, кажется быстрее, чем это было со старым диском.
и затем удалите и повторно добавьте другую сторону, так, чтобы суперблоки соответствовали.
Я отправлю свое решение, которым я глубоко недоволен:
sfdisk -d /dev/good_disk > /root/part.txt
vi /root/part.txt
Раздел увеличения запускает числа, пока они не все кратные числа 8 (8 секторов 512 байтов = 4K).
Увеличьте размер расширенного раздела, пока он не покрывает весь новый диск (который составляет 1 ТБ, в то время как старый диск составлял 500 ГБ - когда другой диск умрет и заменяется, я смогу создать новый RAID-массив в оставшемся свободном пространстве.)
sfdisk /dev/new_disk < /root/part.txt -L
( -L
заставляет его принять разделы, не выровненные к цилиндрическим границам, иначе sfdisk аварийные прекращения работы, ничего не изменяя).
Мне не нравится он, потому что это подвержено ошибкам и утомительно.
Как вы сказали, вы можете присвоить его кратному 8, и вы можете сделать это подверженным ошибкам с GNU parted. Я предполагаю, что / dev / sda - старый добрый диск, а / dev / sdb - новый с размером сектора 4k.
sudo parted /dev/sda unit s print
Запишите размеры разделов. И округлите их до 8. Мы будем использовать здесь округленные числа.
sudo parted --align minimal /dev/sdb
unit s
print
mktable msdos
mkpart primary 64s <64+sda1-1>s
align-check minimal 1
mkpart primary <64+sda1>s <64+sda1+sda2-1>s
align-check minimal 2
mkpart primary <64+sda1+sda2>s <64+sda1+sda2+sda3-1>s
align-check minimal 3
и т. Д.
Если у вас более 4 разделов, вам придется установить четвертый раздел как «расширенный», а остальные разделы определить как «логический».
Отметьте ваши рейд-разделы с помощью метки raid
toggle 1 raid
toggle 2 raid
и т. Д.
print
quit