Назад | Перейти на главную страницу

клонирование centos 7 xfs lvm на устройство меньшего размера

Я собираюсь повторно предложить вопрос, опубликованный в stackoverflow неделю назад. Прошу прощения, если кто-то нашел этот спам, но мне все еще нужна помощь в решении этой проблемы. Я подумал, что это может быть полезно и другим. Прежде всего, у меня есть сервер на базе Centos7, который работает на несовместимом оборудовании в соответствии с корпоративной политикой, мне просто нужно поддерживать отказоустойчивость.

Я сталкиваюсь с очевидной простой вещью.

Мне нужно разместить свой сервер за контроллером RAID, это означает, что мне нужно переместить мою установку CentOS 7 на устройство, подключенное к нему (контроллер 3ware 9650se-2lp, компьютер бизнес-класса HP, DC7600 Convertible Minitower).

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

В моей системе по умолчанию установлена ​​CentOS 7 с томами LVM. После недели документации о том, что и как работает устройство сопоставления устройств, у меня есть одна группа томов под названием «centos» и логические тома под названием «root», «home» и «swap». Легко.

# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  148,56g 64,00m
# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   3   0 wz--n- 148,56g 64,00m
# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos -wi-ao---- 96,50g
  root centos -wi-ao---- 50,00g
  swap centos -wi-ao----  2,00g

Теперь мне нужно уменьшить весь макет, и я добьюсь этого, уменьшив "домашний" lvm из sda2. Я планировал установить новую установку до 130 Гбит / с, а сейчас - 148,56 Гбит / с, поэтому я решил уменьшить «домашнюю» до 18,56 Гбит / с.

Прежде всего fdisk на новый диск, чтобы создать новые два тома, sdb1 и sdb2. После этого я начал работать с логическими томами.

# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
# vgextend centos /dev/sdb2
  Volume group "centos" successfully extended
# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  148,56g  64,00m
  /dev/sdb2  centos lvm2 a--  130,00g 130,00g

# lvcreate --size 77,50G --name home1 centos
  Logical volume "home1" created.
# mkfs.xfs /dev/centos/home1
meta-data=/dev/centos/home1      isize=512    agcount=4, agsize=5079040 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=20316160, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=9920, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# lvcreate --size 50,00G --name root1 centos
# mkfs.xfs /dev/centos/root1
# lvcreate --size 2G --name swap1 centos
# mkswap /dev/centos/swap1

После этого из livecd Clonezilla я клонировал sda1 на sdb1 без перезаписи таблицы разделов, а из командной строки смонтировал логические тома для копирования данных. Я не могу использовать простой dd, который, как я знаю, лучший, потому что dd также скопирует пустое пространство, и новый дом будет уменьшен.

# mkdir /mnt/home
# mkdir /mnt/home1
# mount -o ro /dev/centos/home /mnt/home
# mount /dev/centos/home1 /mnt/home1
# cd /mnt/home
# find . -mount -print | cpio -pdm /mnt/home1
5885177 blocks
# cd /
# umount home
# umount home1
# mkdir /mnt/root
# mkdir /mnt/root1
# mount -o ro /dev/centos/root /mnt/root
# mount /dev/centos/root1 /mnt/root1
# cd /mnt/root
# find . -mount -print | cpio -pdm /home/root1
43415372 blocks

Сделав это, я выключил компьютер, я отключил sda-диск и переместил sdb на первый порт sata на моей материнской плате. Теперь sda в безопасности от моих рук с пудингом. Лучшее еще впереди.

Я снова загрузился с Clonezilla, ничего не скопировав, очистил и переименовал свои логические тома.

# vgreduce --removemissing --force centos
WARNING: Device for PV 0tJwU5-KA41-LEJa-hhFG-SIzx-RGq3-fJNzkm not found or rejected by a filter.
WARNING: Removing partial LV centos/swap.
Logical volume "swap" successfully removed
WARNING: Removing partial LV centos/home.
Logical volume "home" successfully removed
WARNING: Removing partial LV centos/root.
Logical volume "root" successfully removed
Wrote out consistent volume group centos.
# lvrename /dev/centos/root1 /dev/centos/root
Renamed "root1" to "root" in volume group "centos"
# lvrename /dev/centos/home1 /dev/centos/home
Renamed "home1" to "home" in volume group "centos"
# lvrename /dev/centos/swap1 /dev/centos/swap
Renamed "swap1" to "swap" in volume group "centos

Наконец я установил grub2:

# mount /dev/centos/root /mnt
# mount /dev/sda1 /mnt/boot
# mount --bind /dev /mnt/dev &&
mount --bind /dev/pts /mnt/dev/pts &&
mount --bind /proc /mnt/proc &&
mount --bind /sys /mnt/sys
# chroot /mnt
# grub2-install /dev/sda
# grub2-install --recheck /dev/sda
# grub2-mkconfig -o /boot/grub2/grub.cfg

Я исправил предупреждение на grub2-mkconfig, которое заменяет update-grub на grub1, включая новую службу, которую я никогда раньше не использовал lvm2-lvmetad

# grub2-mkconfig -o /boot/grub2/grub.cfg
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Found linux image: /boot/vmlinuz-3.10.0-514.21.2.el7.centos.plus.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.21.2.el7.centos.plus.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-6f6078afdaf94da59deb321bd428dfdf
Found initrd image: /boot/initramfs-0-rescue-6f6078afdaf94da59deb321bd428dfdf.img
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
done

# systemctl enable lvm2-lvmetad.service
# systemctl enable lvm2-lvmetad.socket
# systemctl start lvm2-lvmetad.service
# systemctl start lvm2-lvmetad.socket

Конечно запуск службы с livecd не прошел, я это знаю.

После перезагрузки системы у меня возникло несколько проблем с SELinux. Он продолжает возвращать меня после входа в систему, как удаленно, так и локально, ssh или нет. Конечно, из livecd легко установить SELinux в разрешающий режим, но это производственный сервер, на котором размещены службы для разработки, такие как mediawiki и git. Я не могу начать использовать клонированный диск, поместить новые данные в почти неисправную систему, я не понимаю, в чем я ошибся. Я попытался переустановить пакеты, связанные с SELinux, но чисто случайным образом не понял, что могло быть не так. Я что-то упускаю?

Спасибо за ответы, привет.

Проблема в том, что ваш процесс клонирования не копировал метки файлов selinux.

Загрузиться в разрешающем режиме, touch /.autorelabel, перезагрузитесь еще раз. Система пометит все файлы метками по умолчанию из политики (что может быть не на 100% точным, но все же будет намного лучше, чем сейчас).

После этого вы снова сможете загрузиться в принудительном режиме.

Все следующие шаги (кроме установки загрузчика) будут выполнены в работающей системе.

1. Создайте разделы на sdb

Так же, как вы создавали разделы на sdb. Убедитесь, что sdb1 имеет те же начальные и конечные значения, что и sda1. Создайте sdb2 так же, как и раньше (т.е. не весь остальной драйв)

2. Клонировать sda1 в sdb1

Перемонтируйте / dev / sda1 в режиме только для чтения с mount -o remount,ro /boot и клонировать раздел dd if=/dev/sda1 of=/dev/sdb1.

3. Поменяйте местами диски и убедитесь, что sdb загружается.

Поменяйте местами sda и sdb. Установите загрузчик на новый sda и убедитесь, что загрузчик по-прежнему загружает ядро, когда новый sdb (то есть исходный диск) не подключен. При загрузке произойдет паника, потому что нет корневого тома, но теперь вы знаете, что он может загружаться. Подключить заново sdb.

3. Расширьте группу томов

Добавьте новый sda2 в свою группу томов следующим образом: pvcreate /dev/sda2 и vgextend centos /dev/sda2

4. Переместите свой своп и корневой том

Следующие команды будут шаг не клон ваши тома на новый диск. Однако они останутся в той же группе томов

pvmove -n swap /dev/sdb2 /dev/sda2
pvmove -n root /dev/sdb2 /dev/sda2

5. Клонируйте свой / home

Создайте новый том для / home на sda2, смонтируйте его где-нибудь и клонируйте содержимое с помощью xfsdump и xfsrestore

lvcreate --size 77,50G --name new_home centos /dev/sda2
mount /dev/centos/new_home /mnt
xfsdump -J /home | xfsrestore -J /mnt

6. Убедитесь, что метки selinux перенесены.

Проверь это ls -Z /home и ls -Z /mnt соответствие

7. Переименуйте домашние тома.

Размонтируйте оба домашних тома и переименуйте их соответственно

umount /home
umount /mnt
lvrename centos/home centos/old_home
lvrename centos/new_home centos/home
mount /home

Теперь у вас смонтирован клонированный файл small / home. Том centos / old_home является последним на sdb2. На этом этапе ваша система должна загрузиться и работать без каких-либо проблем, но вам все равно нужно избавиться от sdb.

8. Очистка

После того, как вы перезагрузитесь и убедитесь, что все по-прежнему работает должным образом, вы можете удалить старый домашний том, используя lvremove centos/old_home. Когда вы смотрите на вывод pvs вы должны заметить, что sdb2 должен быть полностью неиспользованным.

На этом этапе вы можете vgreduce centos /dev/sdb2 и pvremove /dev/sdb2 поэтому «старый» диск больше не входит в вашу группу томов.

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

Просто чтобы отметить, что я сделал. Просто обратите внимание:

1) fdisk / dev / sdb и выполните:

  • создать новую пустую таблицу разделов DOS
  • добавьте новый раздел, 1 для загрузки, например sda1, id 83 и те же начало и конец
  • добавить новый раздел, 2 для LVM, id 8e и 135G, меньше sda2, так как мне нужно уменьшить
  • переключить загрузочный флаг на разделе 1

2) mount -o remount, ro / boot

3) dd if = / dev / sda1 of = / dev / sdb1

4) перезагрузка

5) chroot мой корень

  • смонтировать / dev / centos / корень / мнт / корень /
  • смонтировать / dev / sdb1 / mnt / root / boot /
  • mount --bind / dev / / mnt / root / dev / && mount --bind / dev / pts && mount --bind / proc / && mount --bind / sys / mnt / root / sys
  • chroot / мнт / корень /

6) установить загрузчик

  • grub2-install / dev / sdb
  • grub2-install --recheck / dev / sdb
  • grub2-mkconfig -o /boot/grub2/grub.cfg

7) shutdown (выключение)

8) поменять местами диск

9) убедитесь, что все работает нормально

  • В настоящее время я использую загрузку с sda (новый диск) и root с sdb (старый диск)

10) pvcreate / dev / sda2

11) vgextend centos / dev / sda2

12) pvmove -n своп / dev / sdb2 / dev / sda2

13) pvmove -n корень / dev / sdb2 / dev / sda2

14) yum install xfsdump

15) lvcreate --size 80G --name new_home centos / dev / sda2

16) mkfs.xfs / dev / centos / new_home

17) смонтировать / dev / centos / new_home / mnt / root /

18) xfsdump -J - / home | xfsrestore -J - / мнт / корень /

19) проверьте те же метки Selinux

  • ls -Z / home /
  • ls -Z / mnt / root /

20) umount / mnt / root /

21) lvrename / dev / centos / home / dev / centos / old_home

22) lvrename / dev / centos / new_home / dev / centos / home

23) mount / home /

  • Произошла ошибка при отключении от дома, но при установке домой, я думаю, новый работает нормально

24) перезагрузка, все работает нормально

25) lvremove / dev / centos / old_home

26) vgreduce centos / dev / sdb2

27) pvremove / dev / sdb2

28) выключение и отключение sdb

Финиш.