суббота, 25 февраля 2017 г.

Удаленная переустановка Linux по ssh

Наткнулся тут на очень интересную статью на хабре.

Вот эту: https://habrahabr.ru/post/321696/.

Автор молодец, серьезно, не rocket science, но всё методично и последовательно логично изложено.

Но я таки заметил одну мелкую проблему не затронутую в статье.
Конечно не потому что я такой проницательный, в просто потому что уже въезжал в такие грабли однажды.

Итак, задача была такая, удаленный сервер без доступа, каким то затейник установлен так что нет там lvm, и это становится проблемой, потому как нужны снапшоты для бекапа бд.

Так как свободного места там не оставили, и рут раздел на весь диск, то особых вариантов не было, точно так же в памяти разворачивать временную систему, и на месте извращаться.

Ну я вот вспомнив этот опыт, поднял чистый дебиан в вагранте, и решил прогнать сценарий автора.

Там всё идёт отлично до момента, когда нужно создавать lvm разделы.

Т.е. выполняем:


mkdir /target
mount none -t tmpfs -o size=1G /target/
apt-get -y install debootstrap
debootstrap jessie /target/ http://mirror.mephi.ru/debian/
echo "Killer_system" > /target/etc/debian_chroot
 
chroot /target
mount none -t proc /proc/
mount none -t sysfs /sys/
mount none -t devtmpfs /dev/
mount none -t devpts /dev/pts/

apt-get -y install lvm2 debootstrap
apt-get -y install openssh-server openssh-client openssh-blacklist openssh-blacklist-extra --no-install-recommends
sed -i 's/^Port .*$/Port 11122/' /etc/ssh/sshd_config
sed -i 's/^PermitRootLogin .*$/PermitRootLogin yes/' /etc/ssh/sshd_config
/etc/init.d/ssh restart
 
 
 ssh ... -l root -p 11122
 
 dd if=/dev/zero of=/dev/sda bs=1M count=100
 echo 1 > /sys/block/sda/device/delete
 for i in /sys/class/scsi_host/host?/scan ; do echo "- - -" > $i ; done
 
 fdisk /dev/sdb
n<CR> <CR> <CR> <CR>
t<RC> 8e<CR>
w<CR>
 
pvcreate /dev/sdb1
vgcreate vg_root /dev/sdb1
lvcreate -Zn -L500M -n lv_swap0 vg_root

И внезапно въезжаем вот в это:
 Когда исправить уже ничего нельзя.

А всего лишь забыли что lvm2 то на хост системе не было, и модуль не загружен.
Надо было этим на живой ещё хост системе озаботиться поставить lvm2.

Ещё мне кажется автор забыл инструкцию  
vgscan --mknodes
после создания lvm томов

Во всяком случае в моём прогоне на vagrant который я сегодня делал файлы устройств без неё не создавались.
Т.е. полный листинг должен быть такой:


lvcreate -Zn -L500M -n lv_swap0 vg_root
lvcreate -Zn -L1G -n lv_root vg_root
lvcreate -Zn -L2G -n lv_usr vg_root
lvcreate -Zn -L2G -n lv_var vg_root
lvcreate -Zn -L1G -n lv_var_log vg_root
lvcreate -Zn -L1G -n lv_home vg_root
 
vgscan --mknodes 
 
mkswap /dev/vg_root/lv_swap0
mkfs.ext4 /dev/mapper/vg_root-lv_root
mkfs.ext4 /dev/mapper/vg_root-lv_usr
mkfs.ext4 /dev/mapper/vg_root-lv_var
mkfs.ext4 /dev/mapper/vg_root-lv_var_log
mkfs.ext4 /dev/mapper/vg_root-lv_home

mkdir /target
mount /dev/mapper/vg_root-lv_root /target/
mkdir /target/usr /target/var /target/home
mount /dev/mapper/vg_root-lv_usr /target/usr
mount /dev/mapper/vg_root-lv_var /target/var
mkdir /target/var/log
mount /dev/mapper/vg_root-lv_var_log /target/var/log
mount /dev/mapper/vg_root-lv_home /target/home


Всё остальное в статье отлично, после ребута видим свеженькую систему с lvm

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