Проект

Общее

Профиль

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

Андрей Волков, 2025-07-24 04:43

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 1 Андрей Волков
mount -o remount,rw /
36 21 Андрей Волков
lvresize -r -L 3g system/root
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 24 Андрей Волков
Debian 11, 12
72 4 Андрей Волков
<pre><code class="shell">
73 17 Андрей Волков
pivot_root /mnt/newroot /mnt/newroot/mnt/oldroot && hash -r && \
74 4 Андрей Волков
 for MNT in dev proc sys run; do mount --move /mnt/oldroot/$MNT /$MNT; done
75 24 Андрей Волков
</code></pre>
76
77
Debian 13
78
<pre><code class="shell">
79
pivot_root /mnt/newroot /mnt/newroot/mnt/oldroot && hash -r && \
80
 for MNT in dev proc sys run tmp; do mount --move /mnt/oldroot/$MNT /$MNT; done
81 4 Андрей Волков
</code></pre>
82
83
h3. Перезапуск ssh
84
85
<pre><code class="shell">
86
systemctl restart ssh
87
systemctl status ssh -n0
88
</code></pre>
89
90
h3. Перезапуск сервисов
91
92
<pre><code class="shell">
93
systemctl daemon-reexec
94
fuser -vm /mnt/oldroot
95
systemctl restart dbus
96 15 Андрей Волков
systemctl restart systemd-logind systemd-udevd systemd-journald systemd-resolved systemd-networkd systemd-timesyncd
97 4 Андрей Волков
systemctl restart getty@tty1.service user@0.service
98 1 Андрей Волков
systemctl restart serial-getty@ttyS0.service
99 4 Андрей Волков
systemctl restart cron.service
100 9 Андрей Волков
systemctl status -n0 587
101 4 Андрей Волков
systemctl stop qemu-guest-agent.service
102
logout
103
</code></pre>
104 5 Андрей Волков
105
h3. Размонтирование старой файловой системы
106
107
<pre><code class="shell">
108
umount /mnt/oldroot
109
grep /mnt/oldroot /proc/*/mounts
110
grep /mnt/oldroot /proc/*/mounts | cut -d / -f3 | xargs systemctl status -n0 | grep -iPo '[a-z0-9@-]*\.service(?= - )'
111
grep /mnt/oldroot /proc/*/mounts | cut -d / -f3 | xargs systemctl status -n0 | grep -iPo '[a-z0-9@-]*\.service(?= - )' | xargs systemctl restart
112
grep /mnt/oldroot /proc/*/mounts
113 7 Андрей Волков
rmdir /mnt/oldroot
114 5 Андрей Волков
</code></pre>
115
116
h3. Переводим видимость / в shared
117
118
<pre><code class="shell">
119
findmnt -o TARGET,PROPAGATION
120
mount --make-rshared /
121
findmnt -o TARGET,PROPAGATION
122
</code></pre>
123 6 Андрей Волков
124
h2. Последующие шаги
125
126 22 Андрей Волков
h3. Перенос корня обратно на диск
127
128
<pre><code class="shell">
129
gdisk /dev/vda
130
wipefs -a /dev/vda1
131
vgextend system /dev/vda1
132
pvmove -b /dev/loop0
133
pvmove -i1
134
vgreduce system /dev/loop0
135
pvremove /dev/loop0
136
losetup -d /dev/loop0
137
zramctl -r /dev/zram0
138 23 Андрей Волков
vi /etc/fstab
139
e2label /dev/system/root root
140 22 Андрей Волков
</code></pre>
141
142 6 Андрей Волков
h3. Загрузчик
143
144
<pre><code class="shell">
145
dpkg-reconfigure grub-pc
146
update-grub
147
update-initramfs -u
148
</code></pre>