Проект

Общее

Профиль

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

Андрей Волков, 2024-06-10 12:30

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
h3. Перезапуск сервисов
62
63
<pre><code class="shell">
64
systemctl daemon-reexec
65
fuser -vm /mnt/oldroot
66
systemctl restart dbus
67
systemctl restart systemd-logind systemd-journald systemd-udevd systemd-resolved systemd-networkd
68
systemctl restart getty@tty1.service user@0.service
69 1 Андрей Волков
systemctl restart serial-getty@ttyS0.service
70 4 Андрей Волков
systemctl restart cron.service
71 9 Андрей Волков
systemctl status -n0 587
72 4 Андрей Волков
systemctl stop qemu-guest-agent.service
73
logout
74
</code></pre>
75 5 Андрей Волков
76
h3. Размонтирование старой файловой системы
77
78
<pre><code class="shell">
79
umount /mnt/oldroot
80
grep /mnt/oldroot /proc/*/mounts
81
grep /mnt/oldroot /proc/*/mounts | cut -d / -f3 | xargs systemctl status -n0 | grep -iPo '[a-z0-9@-]*\.service(?= - )'
82
grep /mnt/oldroot /proc/*/mounts | cut -d / -f3 | xargs systemctl status -n0 | grep -iPo '[a-z0-9@-]*\.service(?= - )' | xargs systemctl restart
83
grep /mnt/oldroot /proc/*/mounts
84 7 Андрей Волков
rmdir /mnt/oldroot
85 5 Андрей Волков
</code></pre>
86
87
h3. Переводим видимость / в shared
88
89
<pre><code class="shell">
90
findmnt -o TARGET,PROPAGATION
91
mount --make-rshared /
92
findmnt -o TARGET,PROPAGATION
93
</code></pre>
94 6 Андрей Волков
95
h2. Последующие шаги
96
97
h3. Загрузчик
98
99
<pre><code class="shell">
100
dpkg-reconfigure grub-pc
101
update-grub
102
update-initramfs -u
103
</code></pre>