Проект

Общее

Профиль

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

Андрей Волков, 2024-11-05 17:34

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