Проект

Общее

Профиль

Debian-replace-root » История » Редакция 7

Редакция 6 (Андрей Волков, 2024-06-01 15:05) → Редакция 7/13 (Андрей Волков, 2024-06-01 15:31)

h1. Debian-replace-root 

 h2. Подготовка 

 h3. Устанавливаем необходимое 

 <pre><code class="shell"> 
 apt-get install lsof psmisc 
 </code></pre> 

 h3. Останавливаем все важное 

 <pre><code class="shell"> 
 systemctl 
 systemctl stop docker.socket docker.service 
 </code></pre> 

 h3. Отключаем swap 

 <pre><code class="shell"> 
 swapon -s 
 systemctl stop ... 
 </code></pre> 

 h3. Создаём точки монтирования 

 <pre><code class="shell"> 
 mkdir /mnt/newroot 
 mount /dev/system/root /mnt/newroot 
 mkdir /mnt/newroot/mnt/oldroot 
 </code></pre> 

 h3. Переводим видимость / в private 

 <pre><code class="shell"> 
 findmnt -o TARGET,PROPAGATION / 
 findmnt -o TARGET,PROPAGATION 

 mount --make-rprivate / 
 findmnt -o TARGET,PROPAGATION / 
 </code></pre> 

 h2. Переключение 

 h3. Подмена корневой ФС 

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

 <pre><code class="shell"> 
 pivot_root /mnt/newroot /mnt/newroot/mnt/oldroot && \ 
  for MNT in dev proc sys run; do mount --move /mnt/oldroot/$MNT /$MNT; done 
 </code></pre> 

 h3. Перезапуск ssh 

 <pre><code class="shell"> 
 systemctl restart ssh 
 systemctl status ssh -n0 
 </code></pre> 


 h3. Перезапуск сервисов 

 <pre><code class="shell"> 
 systemctl daemon-reexec 
 fuser -vm /mnt/oldroot 
 systemctl restart dbus 
 systemctl restart systemd-logind systemd-journald systemd-udevd systemd-resolved systemd-networkd 
 systemctl restart getty@tty1.service user@0.service 
 systemctl status -n0 587 
 systemctl restart serial-getty@ttyS0.service 
 systemctl restart cron.service 
 systemctl stop qemu-guest-agent.service 
 logout 
 </code></pre> 

 h3. Размонтирование старой файловой системы 

 <pre><code class="shell"> 
 umount /mnt/oldroot 
 grep /mnt/oldroot /proc/*/mounts 
 grep /mnt/oldroot /proc/*/mounts | cut -d / -f3 | xargs systemctl status -n0 | grep -iPo '[a-z0-9@-]*\.service(?= - )' 
 grep /mnt/oldroot /proc/*/mounts | cut -d / -f3 | xargs systemctl status -n0 | grep -iPo '[a-z0-9@-]*\.service(?= - )' | xargs systemctl restart 
 grep /mnt/oldroot /proc/*/mounts 
 rmdir /mnt/oldroot 
 </code></pre> 

 h3. Переводим видимость / в shared 

 <pre><code class="shell"> 
 findmnt -o TARGET,PROPAGATION 
 mount --make-rshared / 
 findmnt -o TARGET,PROPAGATION 
 </code></pre> 

 h2. Последующие шаги 

 h3. Загрузчик 

 <pre><code class="shell"> 
 dpkg-reconfigure grub-pc 
 update-grub 
 update-initramfs -u 
 </code></pre>