Задача - переместить систему Ubuntu/Debian на диск меньшего объема.
Переезд на диск меньшего объема происходит так:
1. Подключаем оба диска к системе и загружаемся с Live CD
2. Предполагается что на старом диске у нас два раздела - первый загрузочный, второй - для LVM. Создаем на новом диске загрузочный раздел и раздел, который будет PV для LVM. Старый диск у нас /dev/sda, новый - /dev/sdb
Копируем целиком таблицу разделов:
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Удаляем второй раздел (просто тот раздел что мы скопировали со старого диска выходит за пределы носителя) и создаем его максимального размера и назначаем ему тип 8e - Linux LVM:
echo -e "\nd\n2\nn\np\n2\n\n\nt\n2\n8e\nw\nx" | fdisk /dev/sdb
Переносим загрузочный раздел с помощью dd:
dd if=/dev/sda1 of=/dev/sdb1
Создаем на /dev/sdb2 физический том LVM:
pvcreate /dev/sdb2
На всякий случай перед изменением размера файловой системы проверяем ее на наличие ошибок (у нас тут debian):
fsck -f /dev/mapper/debian-root
Уменьшаем размер файловой системы.
Тут важно следить за размером. У меня новый диск - 5Gb. На нем помещаются загрузочный раздел - 255Mb и остальное - LVM. В LVM два тома - один debian-root и его размер надо уменьшить, а второй - debian-swap и у меня он 2Gb - его размер оставляем. При этом - сумма размеров этих томов не должна превышать объем диска. Лучше потом увеличить размер тома debian-root до максимума. У меня swap - 2Gb, корневой 255Mb, значит на новый том debian-root остается 5000Mb - 2255Mb =~ 2700Mb
resize2fs /dev/mapper/debian-root 2700M
Дальше мы уменьшаем размер тома debian-root до размера, чуть большего, чем размер его файловой системы, который теперь - 2700M. Так как надо указать НА сколько мы уменьшаем, то надо узнать текущий размер с помощью команды lvdisplay:
lvresize -L-46000M /dev/mapper/debian-root
Затем мы присоединяем к группе томов debian новый раздел:
vgextend debian /dev/sdb2
перемещаем данные:
pvmove /dev/sda2 /dev/sdb2
При этом может оказатьтся что на новом разделе не хватает места. Это будет вот такая ошибка:
Insufficient free space: 1223 extents needed, but only 1218 available Unable to allocate mirror extents for pvmove0. Failed to convert pvmove LV to mirrored
В этом случае надо еще немного уменьшить размер тома debian-root командой
lvresize -L-20M /dev/mapper/debian-root
изымаем старый раздел:
vgreduce debian /dev/sda2
А затем можно увеличить размер файловой системы на томе debian-root до максимума:
resize2fs /dev/mapper/debian-root