Debian-replace-root » История » Редакция 4
Редакция 3 (Андрей Волков, 2024-06-01 14:14) → Редакция 4/16 (Андрей Волков, 2024-06-01 14:40)
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>