Проект

Общее

Профиль

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

Андрей Волков, 2025-01-22 22:59

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