fdisk – разделение в одной строке

Вопрос или проблема

Можете ли вы создать раздел на USB-диске с помощью команды fdisk в одной строке.

Команда fdisk имеет интерактивный характер, но я хочу автоматизировать создание раздела в одной строке с помощью команды fdisk.

Автоматизировать fdisk возможно, но это не просто поддерживать. Как отмечают другие ответы, либо parted, либо sfdisk предназначены для выполнения того, что вам нужно, и их легче автоматизировать.

parted

Чтобы создать раздел в одну строку с помощью parted:

parted -a optimal /dev/usb mkpart primary 0% 4096MB

как видно в этом посте UNIX SE. Каждая из частей достаточно понятна, но на всякий случай вот как определяется mkpart:

mkpart [тип-части тип-фс имя] старт конец

где элементы в квадратных скобках являются необязательными, но вы, вероятно, захотите, чтобы тип-части был primary, старт на 0% и конец на 4096MB или на том размере, который имеет ваша флешка.

sfdisk

Эта возможность уже была упомянута Филом Холленбеком, но я хотел привести пример. Чтобы стереть все и создать один раздел с его помощью, вы можете:

dev='/dev/sdb'
sudo umount "$dev"
echo 'type=83' | sudo sfdisk "$dev"
sudo mkfs.ext4 "${dev}1"

где 83 – это тип раздела “Linux file system”, подходящий для создания файловой системы в Linux, как я показал.

Вы также можете получить вдохновение от того, что он может сделать, с помощью:

sudo sfdisk -d "$dev"

что в моей текущей системе выводит:

label: gpt
label-id: EAC5F401-FA48-41C4-BB27-509F9AEE2369
device: /dev/nvme0n1
unit: sectors
first-lba: 2048
last-lba: 4000797326
sector-size: 512

/dev/nvme0n1p1 : start=        2048, size=     2201600, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=55DBDE7A-290B-4A78-8CE2-35FFCE4C3BAD
/dev/nvme0n1p2 : start=     2203648, size=     4194304, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=6AED9F41-3D8B-40C2-A13B-3B461C65893D
/dev/nvme0n1p3 : start=     6397952, size=  3994396672, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=528580E8-EA7C-4BEE-A67B-648FAA51FA16

Одно из преимуществ этого формата заключается в том, что он идентичен входным данным sfdisk, что позволяет резервировать и восстанавливать вашу текущую настройку разделов.

Смотрите также: Как создать и отформатировать раздел с помощью Bash-скрипта? на Super User

fdisk

Если по какой-то причине вы все еще хотите сделать это с помощью fdisk, то это также работает:

dev='/dev/sdb'
sudo umount "$dev"
printf "o\nn\np\n1\n\n\nw\n" | sudo fdisk "$dev"
sudo mkfs.ext4 "${dev}1"

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

Вам, вероятно, стоит использовать команду parted вместо fdisk.

sfdisk также имеет неинтерактивный режим, который считывает информацию о разделе из ввода stdin. Хотя parted более гибок.

Используйте sfdisk вместо этого.

Страница man для sfdisk немного запутанна, вот несколько конкретных примеров того, как автоматизировать настройку разделов с помощью sfdisk. Один из примеров – вы можете сохранить информацию о разделе с одного диска через sfdisk -l и затем передать это прямо на новый диск.

Для таблиц GPT вы можете использовать sgdisk:

sgdisk -n 0:0:0 /dev/sde

-n, –new=partnum:start:end
Создать новый раздел. Вы вводите номер раздела, начальный сектор и конечный сектор. И начало, и
конец можно указать в абсолютных терминах как номера секторов или как позиции, измеренные в кибиба́йтах (K),
мебиба́йтах (M), гибиба́йтах (G), тебиба́йтах (T) или пебиба́йтах (P); например, 40M указывает на позицию на 40MiB
от начала диска. Вы можете указать местоположения относительно начала или конца указанного диапазона,
предшествуя число знаком ‘+’ или ‘-‘, как в +2G, чтобы указать точку на 2GiB после
начального сектора по умолчанию, или -200M, чтобы указать точку на 200MiB до последнего доступного сектора. Значение начала или конца 0
указывает на значение по умолчанию, которое составляет начало самого большого доступного блока для начального сектора
и конец этого же блока для конечного сектора. Значение partnum 0 заставляет программу использовать первый доступный
номер раздела.

Ответ или решение

Как создать раздел на USB-диске с помощью команды fdisk за одну команду

Создание раздела на USB-диске при помощи команды fdisk может показаться сложной задачей, так как эта команда по своей природе интерактивна. Тем не менее, существует способ автоматизации процесса. В этом ответе будет рассмотрена не только команда fdisk, но и альтернативные инструменты для упрощения задачи создания разделов, такие как parted и sfdisk.

Использование команды fdisk

Для того чтобы создать раздел на USB-диске с помощью fdisk в однострочном формате, можно воспользоваться следующей командой:

dev='/dev/sdb'; sudo umount "$dev"; printf "o\nn\np\n1\n\n\nw\n" | sudo fdisk "$dev"; sudo mkfs.ext4 "${dev}1"

Let’s break down what делает эта команда:

  1. dev='/dev/sdb' — Вы задаете устройство, которое будет использоваться. Следует убедиться, что это правильный путь к вашему USB-диску. Проверьте доступные диски с помощью lsblk или fdisk -l.

  2. sudo umount "$dev" — Отключение устройства перед изменением структуры разделов. Это необходимо для предотвращения потенциальных потерь данных.

  3. printf "o\nn\np\n1\n\n\nw\n" — Ввод команд для fdisk:

    • o — Создает новую пустую таблицу разделов.
    • n — Создает новый раздел.
    • p — Указывает, что это первичный раздел.
    • 1 — Номер раздела.
    • \n\n — Автоматически заполняет начальный и конечный сектора, используя значения по умолчанию.
    • w — Записывает изменения и выходит.
  4. sudo mkfs.ext4 "${dev}1" — Форматирует только что созданный раздел в файловой системе ext4.

Альтернативы fdisk

Несмотря на возможность использования fdisk, рекомендуется рассмотреть более удобные инструменты для автоматизации, такие как parted или sfdisk.

  • Использование parted:

Для создания раздела на USB-диске с помощью parted можно воспользоваться следующей командой:

parted -a optimal /dev/sdb mkpart primary 0% 100%

Это создаст новый первичный раздел, который займет все доступное пространство на диске. Утилита parted обеспечивает более простой и интуитивно понятный ввод команд, делая её более подходящей для автоматизации.

  • Использование sfdisk:
dev='/dev/sdb'; sudo umount "$dev"; echo 'type=83' | sudo sfdisk "$dev"; sudo mkfs.ext4 "${dev}1"

Эта команда также обеспечивает создание раздела и его форматирование, используя sfdisk для автоматического ввода конфигурации разделов в неперерабатываемом режиме.

Заключение

Хотя с помощью fdisk можно быстро создать раздел на USB-диске при помощи автоматизации, рекомендуется использовать более подходящие инструменты, такие как parted или sfdisk, для упрощения процесса и повышения его надежности. Важно всегда удостоверяться, что выбранный вами путь соответствует конкретной задаче и требованиям вашего проекта.

Оцените материал
Добавить комментарий

Капча загружается...