Как изменить размер диска без раздела?

Чистый Баш:

mapfile -t lines < input
for (( i=0; i < ${#lines[@]}; i+=4 ))
do printf "%s\n" "${lines[$i]}"
done

mapfile — это встроенная функция, добавленная в Bash 4, которая считывает стандартный ввод в массив, названный здесь lines, с одной строкой на запись. Опция -tудаляет последние символы новой строки.

Если вы хотите напечатать каждую четвертую строку, начиная со строки 4, вы можете сделать это в одной команде, используя mapfileопцию обратного вызова -C, которая запускает предоставленный код через каждые несколько строк с заданным интервалом. по -c. Текущий индекс массива и следующая назначаемая строка передаются коду в качестве аргументов.

mapfile -t -c4 -C 'printf "%.0s%s\n"' < input

Здесь используется встроенная функция printf; код формата %.0sподавляет первый аргумент (индекс ), поэтому печатается только строка.

Вы можете использовать ту же команду для печати каждой четвертой строки, начиная со строки 1, 2 или 3, но вам придется добавить 3, 2 или 1 строку к input, прежде чем передать ее в mapfile. что, я думаю, доставляет больше хлопот, чем того стоит.

Это тоже работает:

mapfile -t lines < input
printf "%s%.0s%.0s%.0s\n" "${lines[@]}"

Здесь printfпотребляет четыре элемента массива linesза раз, печатая только первый и пропуская остальные три с помощью %.0s. Мне это не нравится, так как вам нужно вручную возиться со строкой формата для разных интервалов или начальных точек.

0
01.04.2021, 06:16
2 ответа

Вам нужно будет убедиться, что ядро ​​распознало новый размер, например,. запустив fdisk -l /dev/<device>или cat /sys/block/<device>/sizeи проверив, что общий размер соответствует новому размеру, а не старому. Если вы используете паравиртуализированные драйверы на виртуальной машине, большинство из них справятся с этим автоматически.

Но если старый размер все еще отображается, можно использовать echo 1 > /sys/block/<device>/device/rescan, чтобы сообщить ядру, что размер устройства изменился.

Как только ядро ​​узнает новый размер всего устройства, в вашем случае нет таблицы разделов для редактирования, поэтому вы можете перейти непосредственно к расширению файловой системы, используя инструмент, зависящий от файловой системы -.

Для файловых систем ext2/ext3/ext4 вы можете использовать resize2fs /dev/<device>, независимо от того, смонтирована файловая система в данный момент или нет.

Для XFS файловая система должна быть смонтирована для ее расширения, и команда будет xfs_growfs <mount point pathname>.

Другие типы файловых систем имеют собственные правила и инструменты расширения.

Если ваш дистрибутив включает fsadm, он предоставляет унифицированный метод изменения размера файловых систем ext2/ext3/ext4, ReiserFS и XFS (, мы надеемся, что в будущем он будет расширен для охвата других типов файловых систем ). Команда будет fsadm resize /dev/<device>.

3
28.04.2021, 22:54

Если диск полностью пуст (нет разделов, файловых систем и т. д. ), вам не нужно ничего делать. В противном случае вам нужно будет использовать такую ​​программу, как fdisk, для изменения размера разделов и файловых систем внутри них.

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

-1
28.04.2021, 22:54

Теги

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