Проект

Общее

Профиль

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

Андрей Волков, 2024-06-20 00:24

1 1 Андрей Волков
h1. Debian-replace-root
2
3
h2. Подготовка
4
5
h3. Устанавливаем необходимое
6
7 2 Андрей Волков
<pre><code class="shell">
8 10 Андрей Волков
dpkg --list lsof psmisc
9 1 Андрей Волков
apt-get install lsof psmisc
10 2 Андрей Волков
</code></pre>
11 1 Андрей Волков
12
h3. Останавливаем все важное
13
14 2 Андрей Волков
<pre><code class="shell">
15 12 Андрей Волков
systemctl --state running
16 1 Андрей Волков
systemctl stop docker.socket docker.service
17 2 Андрей Волков
</code></pre>
18 1 Андрей Волков
19
h3. Отключаем swap
20
21 2 Андрей Волков
<pre><code class="shell">
22 1 Андрей Волков
swapon -s
23
systemctl stop ...
24 2 Андрей Волков
</code></pre>
25 1 Андрей Волков
26
h3. Создаём точки монтирования
27
28 2 Андрей Волков
<pre><code class="shell">
29 1 Андрей Волков
mkdir /mnt/newroot
30
mount /dev/system/root /mnt/newroot
31
mkdir /mnt/newroot/mnt/oldroot
32 2 Андрей Волков
</code></pre>
33 3 Андрей Волков
34
h3. Переводим видимость / в private
35
36
<pre><code class="shell">
37
findmnt -o TARGET,PROPAGATION /
38
findmnt -o TARGET,PROPAGATION
39
40
mount --make-rprivate /
41
findmnt -o TARGET,PROPAGATION /
42
</code></pre>
43 4 Андрей Волков
44
h2. Переключение
45
46
h3. Подмена корневой ФС
47
48
Выполнять команды нужно вместе, иначе есть риск обрыва консоли
49
50
<pre><code class="shell">
51
pivot_root /mnt/newroot /mnt/newroot/mnt/oldroot && \
52
 for MNT in dev proc sys run; do mount --move /mnt/oldroot/$MNT /$MNT; done
53
</code></pre>
54
55
h3. Перезапуск ssh
56
57
<pre><code class="shell">
58
systemctl restart ssh
59
systemctl status ssh -n0
60
</code></pre>
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 1 Андрей Волков
systemctl restart serial-getty@ttyS0.service
71 4 Андрей Волков
systemctl restart cron.service
72 9 Андрей Волков
systemctl status -n0 587
73 4 Андрей Волков
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>