Проект

Общее

Профиль

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

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

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