Проект

Общее

Профиль

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

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

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