Как увеличить размер виртуального диска цикла?

Сawk:

echo "This is it"|awk -F '<xxxxx>' '{print $1}'

Обратите внимание, что разделитель полей (аргумент для-F)является регулярным выражением, поэтому, если какие-либо символы в разделителе являются специальными в регулярных выражениях, вам нужно их экранировать.

3
29.06.2020, 11:59
2 ответа

Обычное предупреждение:изменение размера файловых систем и разделов может привести к потере данных из-за программных ошибок, неисправного оборудования, потери питания, человеческих ошибок. Убедитесь, что вы всегда делаете резервную копию своих данных.

Контурное устройство представляет собой блочное устройство, логически аналогичное физическому диску. Таким образом, менеджеры разделов не предназначены для прямого изменения его размера.

Пара полезных функций, которые вы еще не нашли: losetup -c, чтобы драйвер цикла обновлял размер блочного устройства при изменении размера его резервного файла, и partprobe, чтобы ядро ​​обновляло свои внутренние представление разделов на устройстве. (Хотя вам, вероятно, не нужно явно вызывать последний, если вы используете диспетчер разделов с графическим интерфейсом, такой как GParted ).

Создадим рабочий пример:

$ fallocate -l 100M volume
$ sudo parted <<'EOT'
select./volume
mklabel msdos
mkpart primary ext4 1MiB 50M
mkpart primary ext4 50M 100%FREE
quit
EOT
$ sudo losetup -P /dev/loop0 volume
$ sudo mkfs.ext4 /dev/loop0p1
$ sudo mkfs.ext4 /dev/loop0p2
$ mkdir mp1 mp2
$ sudo mount /dev/loop0p1 mp1
$ sudo mount /dev/loop0p2 mp2

Это дает:

$ lsblk /dev/loop0
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0       7:0    0  100M  0 loop
├─loop0p1 259:0    0   47M  0 part /path/to/mp1
└─loop0p2 259:1    0   52M  0 part /path/to/mp2
$ df -h /dev/loop0p*
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0p1     42M  1.1M   38M   3% /path/to/mp1
/dev/loop0p2     47M  1.1M   42M   3% /path/to/mp2

Затем мы можем увеличить файл, поддерживающий наше петлевое устройство, и позволить losetupre -прочитать размер файла, чтобы обновить емкостьloop0:

$ fallocate -l 200M volume
$ sudo losetup -c /dev/loop0

Без размонтирования двух разделов мы сможем только увеличить их и содержащиеся в них файловые системы на количество свободного места справа от них (в нашем случае можно расширить только /dev/loop0p2). Кроме того, чтобы иметь возможность изменять размер файловых систем, нам нужно сообщить ядру об измененной таблице разделов :

.
$ sudo parted <<'EOT'
select./volume
resizepart 2 100%FREE
quit
EOT
$ sudo partprobe -s /dev/loop0
$ sudo resize2fs /dev/loop0p2

(Размонтирование двух файловых систем также позволит вам уменьшить или переместить разделы. Обратите внимание, что при сжатии раздела порядок этих шагов обратный :сначала измените размер файловой системы, затем измените размер раздела (и при необходимости сообщите ядру об изменениях. ), затем уменьшите размер резервного файла ).

Окончательно получив:

$ lsblk /dev/loop0
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0       7:0    0  200M  0 loop
├─loop0p1 259:0    0   47M  0 part /path/to/mp1
└─loop0p2 259:1    0  152M  0 part /path/to/mp2
$ df -h /dev/loop0p*
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0p1     42M  1.1M   38M   3% /path/to/mp1
/dev/loop0p2    144M  1.6M  135M   2% /path/to/mp2
6
18.03.2021, 23:23

Вы не можете этого сделать :то, как работает петлевое устройство в ядре Linux, оно использует размер файла изображения для работы с ним и не будет выполнять запись за его пределами.

Единственный способ добиться того, чего вы хотите, — размонтировать образ, увеличить его размер/переразбить на разделы, запустить resize2fsили любую другую ФС, которую вы используете для изменения размера разделов, а затем смонтировать ее обратно.

1
18.03.2021, 23:23

Теги

Похожие вопросы