@HighMan

Как создать новый раздел на весь диск?

Здравствуйте, коллеги!
Нужно скриптом создавать новую таблицу разделов нв нескольких машинах.
Можно конечно извратиться, типа:
echo -en "n\n\n\n+255M\nt\n1\nw\n" | fdisk /dev/sdb

Данное извращение, конечно имеет место быть, но как-то не красиво.
Решил пойти иным путем. Сначала создать на тестовом диске нужную таблицу разделов вручную затем думпнуть ее sfdisk -d /dev/sdb > disk.dump и обезличить полученный файл sed -i 's/,\s*uuid.*$//;s/label-id.*$//;s/last-lba.*//' disk.dump
Извините за такое извращение над sed. Я его плохо знаю.
В общем все хорошо! sfdisk /dev/sdb < disk.dump Диск нормально разбивается, но...
Диски могут различаться по размеру, а нужно создавать последний раздел на все оставшееся пространство. И вот тут я в растерянности. Можно как-то через скрипт заставить sfdisk создать этот раздел не зная оставшегося объема?
Можно, конечно, снова извратиться с fdisk или даже привлечь parted, но последний мне жуть как не понравился.
В общем, подскажите как из скрипта ПРАВИЛЬНО создать последний раздел на весь оставшийся объем?
  • Вопрос задан
  • 341 просмотр
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
echo -e "label:mbr\nstart=1M" | sfdisk /dev/sdb
создаст таблицу разделов mbr на диске /dev/sdb с одним разделом на весь диск у которого начальное смещение составляет 1M

другой пример
echo -e "label:gpt\nsize=100M\nsize=+" | sfdisk /dev/sdb

здесь мы создаём таблицу разделов gpt и два раздела, один на 100M а второй на всё оставшееся место.

если нужно ресайзить уже готовые разделы то глянь здесь где всё доходчиво написанно
но а вообще смотри ман
и кстати у sfdisk, fdisk и cfdisk общая поддержка создания сценария что иногда бывает довольно удобно, смотри (s)fdisk scripts

п.с.
sfdisk довольно недооценённая утилита в которую если вникнуть позволяет творить чудеса

Диск должен быть разбит на 4 раздела. 3 я создаю из дампа sfdisk. Нужно создать еще один. Последний. На все оставшееся место.

всё очень просто:
echo -e "size=+" | sfdisk -N 4 /dev/sdb

вот небольшой пример
$ truncate -s 1G disk.img
$ echo -e "label:mbr\nsize=100M\nsize=200M\nsize=300M" | sfdisk disk.img
$ sfdisk --dump disk.img
label: dos
label-id: 0x58b01c8a
device: disk.img
unit: sectors
sector-size: 512

disk.img1 : start=        2048, size=      204800, type=83
disk.img2 : start=      206848, size=      409600, type=83
disk.img3 : start=      616448, size=      614400, type=83

$ echo -e "size=+" | sfdisk -N 4 disk.img
$ sfdisk --dump disk.img
label: dos
label-id: 0x58b01c8a
device: disk.img
unit: sectors
sector-size: 512

disk.img1 : start=        2048, size=      204800, type=83
disk.img2 : start=      206848, size=      409600, type=83
disk.img3 : start=      616448, size=      614400, type=83
disk.img4 : start=     1230848, size=      866304, type=83
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@garbagecollected
Когда мне нужен раздел на весь диск, я просто создаю ФС на весь диск без разделов вроде sda1 sda2:
mkfs.ext4 /dev/sda.
Ответ написан
Комментировать
@xibir
Пример создания 2х разделов на пустом диске
parted /dev/sda mklabel gpt
parted /dev/sda mkpart p1 1M 500M
parted /dev/sda mkpart p2 500M 100%
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы