Проект

Общее

Профиль

Debian-replace-root » История » Версия 8

Андрей Волков, 2024-06-02 13:41

1 1 Андрей Волков
h1. Debian-replace-root
2
3
h2. Подготовка
4
5
h3. Устанавливаем необходимое
6
7 2 Андрей Волков
<pre><code class="shell">
8 1 Андрей Волков
apt-get install lsof psmisc
9 2 Андрей Волков
</code></pre>
10 1 Андрей Волков
11
h3. Останавливаем все важное
12
13 2 Андрей Волков
<pre><code class="shell">
14 8 Андрей Волков
systemctl | grep running
15 1 Андрей Волков
systemctl stop docker.socket docker.service
16 2 Андрей Волков
</code></pre>
17 1 Андрей Волков
18
h3. Отключаем swap
19
20 2 Андрей Волков
<pre><code class="shell">
21 1 Андрей Волков
swapon -s
22
systemctl stop ...
23 2 Андрей Волков
</code></pre>
24 1 Андрей Волков
25
h3. Создаём точки монтирования
26
27 2 Андрей Волков
<pre><code class="shell">
28 1 Андрей Волков
mkdir /mnt/newroot
29
mount /dev/system/root /mnt/newroot
30
mkdir /mnt/newroot/mnt/oldroot
31 2 Андрей Волков
</code></pre>
32 3 Андрей Волков
33
h3. Переводим видимость / в private
34
35
<pre><code class="shell">
36
findmnt -o TARGET,PROPAGATION /
37
findmnt -o TARGET,PROPAGATION
38
39
mount --make-rprivate /
40
findmnt -o TARGET,PROPAGATION /
41
</code></pre>
42 4 Андрей Волков
43
h2. Переключение
44
45
h3. Подмена корневой ФС
46
47
Выполнять команды нужно вместе, иначе есть риск обрыва консоли
48
49
<pre><code class="shell">
50
pivot_root /mnt/newroot /mnt/newroot/mnt/oldroot && \
51
 for MNT in dev proc sys run; do mount --move /mnt/oldroot/$MNT /$MNT; done
52
</code></pre>
53
54
h3. Перезапуск ssh
55
56
<pre><code class="shell">
57
systemctl restart ssh
58
systemctl status ssh -n0
59
</code></pre>
60
61
62
h3. Перезапуск сервисов
63
64
<pre><code class="shell">
65
systemctl daemon-reexec
66
fuser -vm /mnt/oldroot
67
systemctl restart dbus
68
systemctl restart systemd-logind systemd-journald systemd-udevd systemd-resolved systemd-networkd
69
systemctl restart getty@tty1.service user@0.service
70
systemctl status -n0 587
71
systemctl restart serial-getty@ttyS0.service
72
systemctl restart cron.service
73
systemctl stop qemu-guest-agent.service
74
logout
75
</code></pre>
76 5 Андрей Волков
77
h3. Размонтирование старой файловой системы
78
79
<pre><code class="shell">
80
umount /mnt/oldroot
81
grep /mnt/oldroot /proc/*/mounts
82
grep /mnt/oldroot /proc/*/mounts | cut -d / -f3 | xargs systemctl status -n0 | grep -iPo '[a-z0-9@-]*\.service(?= - )'
83
grep /mnt/oldroot /proc/*/mounts | cut -d / -f3 | xargs systemctl status -n0 | grep -iPo '[a-z0-9@-]*\.service(?= - )' | xargs systemctl restart
84
grep /mnt/oldroot /proc/*/mounts
85 7 Андрей Волков
rmdir /mnt/oldroot
86 5 Андрей Волков
</code></pre>
87
88
h3. Переводим видимость / в shared
89
90
<pre><code class="shell">
91
findmnt -o TARGET,PROPAGATION
92
mount --make-rshared /
93
findmnt -o TARGET,PROPAGATION
94
</code></pre>
95 6 Андрей Волков
96
h2. Последующие шаги
97
98
h3. Загрузчик
99
100
<pre><code class="shell">
101
dpkg-reconfigure grub-pc
102
update-grub
103
update-initramfs -u
104
</code></pre>