Я собираюсь повторно предложить вопрос, опубликованный в 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% точным, но все же будет намного лучше, чем сейчас).
После этого вы снова сможете загрузиться в принудительном режиме.
Все следующие шаги (кроме установки загрузчика) будут выполнены в работающей системе.
Так же, как вы создавали разделы на sdb. Убедитесь, что sdb1 имеет те же начальные и конечные значения, что и sda1. Создайте sdb2 так же, как и раньше (т.е. не весь остальной драйв)
Перемонтируйте / dev / sda1 в режиме только для чтения с mount -o remount,ro /boot
и клонировать раздел dd if=/dev/sda1 of=/dev/sdb1
.
Поменяйте местами sda и sdb. Установите загрузчик на новый sda и убедитесь, что загрузчик по-прежнему загружает ядро, когда новый sdb (то есть исходный диск) не подключен. При загрузке произойдет паника, потому что нет корневого тома, но теперь вы знаете, что он может загружаться. Подключить заново sdb
.
Добавьте новый sda2 в свою группу томов следующим образом: pvcreate /dev/sda2
и vgextend centos /dev/sda2
Следующие команды будут шаг не клон ваши тома на новый диск. Однако они останутся в той же группе томов
pvmove -n swap /dev/sdb2 /dev/sda2
pvmove -n root /dev/sdb2 /dev/sda2
Создайте новый том для / 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
Проверь это ls -Z /home
и ls -Z /mnt
соответствие
Размонтируйте оба домашних тома и переименуйте их соответственно
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.
После того, как вы перезагрузитесь и убедитесь, что все по-прежнему работает должным образом, вы можете удалить старый домашний том, используя lvremove centos/old_home
. Когда вы смотрите на вывод pvs
вы должны заметить, что sdb2 должен быть полностью неиспользованным.
На этом этапе вы можете vgreduce centos /dev/sdb2
и pvremove /dev/sdb2
поэтому «старый» диск больше не входит в вашу группу томов.
Теперь вы можете выключить коробку и удалить старый диск.
Просто чтобы отметить, что я сделал. Просто обратите внимание:
1) fdisk / dev / sdb и выполните:
2) mount -o remount, ro / boot
3) dd if = / dev / sda1 of = / dev / sdb1
4) перезагрузка
5) chroot мой корень
6) установить загрузчик
7) shutdown (выключение)
8) поменять местами диск
9) убедитесь, что все работает нормально
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
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
Финиш.