Заменил жёсткий диск - не выключая комп и вообще не перезагружаясь.

May 21, 2010 21:55

Купил Seagate Barracuda LP (который на 5900rpm крутится) - и захотел сделать несложную ротацию дисков.
Старичка HITACHI на 400гб отправить на пенсию - на быкапы, ну, или если когда придётся комп собрать. S.M.A.R.T. про него говорит, что всё в порядке - но всё же пусть отдохнёт (25000 часов аптайма).
Второй - WD на 750гб - сделать основным, вместо Hitachi.
Ну и свежий Seagate приспособить под данные.

Изначальная разбивка была такая:

alexey@ubuntu64:~/.config$ sudo fdisk -l

Диск /dev/sda: 400.1 ГБ, 400088457216 байт
255 heads, 63 sectors/track, 48641 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000fc84

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          14      112423+  83  Linux
/dev/sda2              15        1582    12594960   82  Linux своп / Solaris
/dev/sda3            1583       48641   378001417+  8e  Linux LVM

Диск /dev/sdb: 750.2 ГБ, 750156374016 байт
255 heads, 63 sectors/track, 91201 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003f49a

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1               1       91201   732572001  8e  Linux LVM

Соответственно, нужно по сути всего лишь перенести первый раздел (/dev/sda1). Это загрузочный (/boot) раздел. Вся остальная система живёт в LVM.
Вот здесь-то и радуют все прелести последнего :)

root@ubuntu64:~# lvs
  LV         VG   Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  DEVXP      vg   -wi-ao 100,00g                                     
  bigstore   vg   -wi-ao 320,00g                                     
  geeentoo   vg   -wi-a-  20,00g                                     
  gentoo     vg   -wi-a-  20,00g                                     
  gentoo32   vg   -wi-ao  10,00g                                     
  home       vg   -wi-a-  20,00g                                     
  lhome      vg   -wi-ao  20,00g                                     
  lroot      vg   -wi-ao   2,00g                                     
  lusr       vg   -wi-ao  10,00g                                     
  lvar       vg   -wi-ao  10,00g                                     
  multimedia vg   -wi-ao 200,00g                                     
  mythtv     vg   -wi-ao 100,00g                                     
  repmirror  vg   -wi-a-   4,00g                                     
  root       vg   -wi-a-   2,00g                                     
  tmp        vg   -wi-ao   5,00g                                     
  usr        vg   -wi-a-  10,00g                                     
  var        vg   -wi-a-   5,00g                                     
  work       vg   -wi-ao  50,00g

1. Подключаем новый винт. "На горячую", ибо это sata. Он отлично подхватывается системой. Запускаем на него fdisk, создаём таблицу разделов (винт совершенно "нулёвый", он не разбит) и создаём единственный раздел на весь диск. Типа - Linux LVM (8e).
2. Инициализируем том: pvcreate /dev/sdc1
3. Подключаем к имеющейся группе томов: vgextend vg /dev/sda1
4. Переносим на него все данные из предыдущих двух разделов:
pvmove /dev/sda3 /dev/sdc1
pvmove /dev/sdb1 /dev/sdc1

Обе операции проходят в фоновом режиме, при работающей системе.

5. Когда всё закончилось (потребовалось несколько часов) - удаляем из группы освобождённые тома
vgreduce vg /dev/sda3
vgreduce vg /dev/sdb1

Удаляем метки lvm с этих томов:
pvremove /dev/sda3
pvremove /dev/sdb1

Теперь вся живая система целиком находится на новом винте. На старом Hitachi остался только boot-раздел и раздел подкачки.

6. Sync на всякий случай - и переразбиваем второй диск (/dev/sdb). Удаляем бывший до этого единственным linux LVM (/dev/sdb1) и создаём три раздела: sdb1 (linux) - 100Мб (здесь будет новый /boot). Подкачка (в моём случае - 12 Гб). И - "всё остальное" - снова Linux LVM. Форматируем будущий /boot: mkfs.ext2 /dev/sdb1

7. Переносим данные с существующего раздела /boot:

sudo -i
mkdir /media/newboot
mount /dev/sdb1 /media/newboot
cd /boot
find . -xdev -print0 | cpio -v0dp /media/newboot

Проходит пара секунд - и всё скопировано!

8. Правим параметры нового и старого /boot. Сперва отмонтируем оба (umount /boot, umount /media/newboot). Затем смотрим в fstab и видим там, что /boot в системе монтируется по UUID, примерно вот так:

# /boot was on /dev/sda1 during installation
UUID=e5c8ad0c-c088-4507-8c1b-1c5b86850cf3 /boot           ext2    noatime         0       2

Соответственно - берём, меняем UUID у существующего /boot (я просто поменял последнюю цифру на 4). Затем меняем UUID у нового /boot на уже известный системе.
tune2fs -U e5c8ad0c-c088-4507-8c1b-1c5b86850cf4 /dev/sda1
tune2fs -L boot -U e5c8ad0c-c088-4507-8c1b-1c5b86850cf3 /dev/sdb1

Проверяем:
sudo mount /boot
mount

Видим:
/dev/sdb1 on /boot type ext2 (rw,noatime)

т.е. всё в порядке, система "не заметила", что ей сменили раздел :).

9. Ставим grub на второй диск:
grub-install /dev/sdb

10. Полностью освобождаем первые два диска - /dev/sda и /dev/sdb.

umount /boot
swapoff -a

В общем-то, это всё. Кроме подкачки и /boot всё остальное (LVM) мы уже оттуда удалили :) Ещё раз sync на всякий случай - и снова приступаем к железу.

11. "На горячую", аккуратно и не торопясь отсоединяем шлейф от sdb и перекидываем на него шлейф от sda. Таким образом - мы отключили старый Hitachi, а WD стал теперь /dev/sda.

12. Добавляем перенесённый том в группу:
pvcreate /dev/sda3
vgextend vg /dev/sda3.

(теперь sda - это уже WD, а Hitachi больше нет в системе). В общем-то, на этом можно было остановиться - но теперь в системе есть sda и sdc, а sdb нет. Выходит "дырка" в нумерации. Непорядок! К тому же сейчас вся система живёт на sdc. То есть просто отключить её не получится. Что делать?

В голову пришёл следующий сценарий: вновь подключить старый Hitachi как /dev/sdd. Включить его в группу томов. Затем сделать pvmove для /dev/sdc - то есть освободить этот диск. После чего - убрать из группы, отсоединить и подключить к /dev/sdb. А затем снова добавить в группу, и отбуксировать на него данные с hitachi (./dev/sdd), после чего последний удалить из системы, на этот раз уже навсегда. Но - это ещё два копирования всех данных. То есть ещё несколько часов.

Немного подумав, был применён другой способ. А заодно - оптимизировалось расположение логических томов (системные - на более скоростном, данные и мультимедия - на том, что помедленнее).

В первую очередь - я отмонтировал все тома с некритичными данными (файлопомойка /media/bigstore, фильмопомойка /media/bigstore/multimedia, папку с рабочими данными (work), папку с кэшем MythTV и папку с виртуальными машинами VirtualBox. Остались сугубо системные - vg/root, vg/usr, vg/var, vg/tmp, vg/home - общим "весом" около 20Gb (главным образом за счёт vg/home). Затем я отбуксировал эти логические тома на физический том /dev/sda3. Здесь тоже очень просто - создал для них зеркальные тома на /dev/sda3, затем преобразовал зеркальные тома в обычные, прибив при этом оригиналы. Т.е. зеркала превратились в сами сущности :). Наконец - выполнил vgsplit. Получил две активные группы томов - в одной - вся система, находящаяся на /dev/sda3. В другой - всё не сильно важное. Затем "не сильно важную" группу деактивировал, заглушил диск и переподключил его шлейф на /dev/sdb. Там снова активизировал группу - снова слил две группы томов в одну - и снова смонтировал все второстепенные разделы.

Итог - задача выполнена. Первый диск ушёл "на пенсию", второй стал первым, а место второго занял объёмистый, но неторопливый 2-террабайтный Барракуда. И всё - не выключая компьютер и даже не перезагружая систему.

lvm, перенос томов, linux

Previous post Next post
Up