пятница, 15 февраля 2013 г.

Перенос системы на диск 3TB

В процессе обновления дисковой подсистемы домашнего сервера я столкнулся с необходимостью немного изменить привычную мне схему переноса данных на новый жесткий диск. Далее я расскажу об отличиях старой и новой схем, почему возникла эта проблема и опишу способ, которым я решил ее.

Прошлый апгрейд сервера прошел по схеме:
  • Подключаю к серверу новый диск;
  • Создаю таблицу разделов - два primary раздела (один для корня или /boot и второй для LVM2 PV);
  • Мигрирую LVM на новый диск: pvcreate, vgextend, pvmove, vgreduce, pvremove;
  • Переношу данные, которые были вне LVM (/ или /boot);
  • Устанавливаю загрузчик на новый диск (grub-install).
Но в этот раз технологии шагнули дальше и этот способ больше не годился...

Перед покупкой нового диска я определился с критериями, которые мне важны:

Форм-фактор: 3.5"
Интерфейса: SATA III
Объем: 2TB+
Скорость вращения шпинделя: 7200 об/с

Потом посмотрел варианты, которые сейчас можно купить в Минске. По результату получилось, что минимальную стоимость одного гигабайта сейчас имеют модели объемом 3TB. На рынке уже есть предложения на 4TB, но их стоимость для меня пока неоправданно завышена. Из списка претендентов сразу был выброшен Seagate (по религиозным соображениям) и в итоге выбор пал на Toshiba DT01ACA300 (он же Hitachi Deskstar 7K3000 HDS723030BLE640).

В процессе изучения отзывов на эту модель наткнулся на форумы, где жаловались на невозможность загрузить систему с этого диска. Начал копать причину этого поведения и выяснил, что некоторые BIOS не могут загрузить систему с дисков более 2.2TB. Если у вас используется UEFI, то проблем быть не должно, но мне не хочется связываться сейчас с новой технологией.

Соответственно первая часть проблемы - поддержка "больших дисков" в BIOS. После проверки описания материнской платы сервера проблема была снята с повестки дня (производитель заявляет полную поддержку жестких дисков 3TB).

Следующая проблема - MBR не поддерживает диски более 2.2TB. Решение - использовать GPT (GUID Partition Table). Для этого в debian мне потребовался parted вместо привычного fdisk. Устанавливаю его и разбиваю диск на 3 раздела: один для bios_boot (используется загрузчиком grub), второй для раздела /boot (вроде должен располагаться в первых 2TB) и остаток пространства под LVM2_PV.

$ sudo aptitude install parted
$ sudo parted /dev/sdb
(parted) mklabel gpt
(parted) unit s
(parted) print
Model: ATA TOSHIBA DT01ACA3 (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

(parted) mkpart biosboot 8192 16383
(parted) set 1 bios_grub on
(parted) mkpart boot 16384 630783
(parted) mkpart lvm2_pv 630784 5860533134
(parted) unit MiB print
Model: ATA TOSHIBA DT01ACA3 (scsi)
Disk /dev/sdb: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End         Size        File system  Name      Flags
 1      4,00MiB  8,00MiB     4,00MiB                  biosboot  bios_grub
 2      8,00MiB  308MiB      300MiB                   boot
 3      308MiB   2861588MiB  2861280MiB               lvm2_pv

(parted) quit

Создаю файловую систему для /boot, расширяю группу томов LVM на новый диск, а затем вывожу старый диск из использования в LVM.

$ sudo mkfs -t ext2 -L BOOT /dev/sdb2
$ sudo pvcreate /dev/sdb3
$ sudo vgextend VolGroup0 /dev/sdb3
$ sudo pvmove /dev/sda2
$ sudo vgreduce VolGroup0 /dev/sda2
$ sudo pvremove /dev/sda2

На старом диске корень системы был в виде обычного раздела, а на новом было решено перейти на отдельный раздел для /boot и корень системы в LVM. Создаю новый том (VolGroup0/rootfs) и переношу на него данные.

$ sudo lvcreate -n rootfs -L 5G VolGroup0
$ sudo mkfs -t ext3 /dev/VolGroup0/rootfs
$ sudo mkdir /mnt/{old,new}root
$ sudo mount /dev/sda2 /mnt/oldroot
$ sudo mount /dev/VolGroup0/rootfs /mnt/newroot
$ sudo mkdir /mnt/newroot/boot
$ sudo mount /dev/sdb2 /mnt/newroot/boot
$ sudo rsync -aH /mnt/oldroot/ /mnt/newroot/
$ sudo umount /mnt/oldroot 

Осталось отредактировать /mnt/newroot/etc/fstab и добавить туда записи для новых / и /boot. Последним на новый диск ставится загрузчик.

$ sudo mount -o rbind /dev /mnt/newroot/dev
$ sudo mount -t proc proc /mnt/newroot/proc
$ sudo mount -t sysfs sys /mnt/newroot/sys
$ sudo chroot /mnt/newroot /bin/bash
(chroot) # mount /var /usr
(chroot) # grub-install --boot-directory=/boot --recheck /dev/sdb
(chroot) # update-initramfs -u
(chroot) # update-grub
(chroot) # exit
$ grep /mnt/newroot /proc/mounts | awk '{print $2}' | sort -r | xargs -n1 sudo umount

Теперь все готово, выключаю систему, извлекаю старый жесткий диск, включаю и радуюсь загрузке системы уже с нового диска.

Комментариев нет:

Отправить комментарий