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