Вопрос или проблема
Можете ли вы создать раздел на 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 делает эта команда:
-
dev='/dev/sdb'
— Вы задаете устройство, которое будет использоваться. Следует убедиться, что это правильный путь к вашему USB-диску. Проверьте доступные диски с помощьюlsblk
илиfdisk -l
. -
sudo umount "$dev"
— Отключение устройства перед изменением структуры разделов. Это необходимо для предотвращения потенциальных потерь данных. -
printf "o\nn\np\n1\n\n\nw\n"
— Ввод команд дляfdisk
:o
— Создает новую пустую таблицу разделов.n
— Создает новый раздел.p
— Указывает, что это первичный раздел.1
— Номер раздела.\n\n
— Автоматически заполняет начальный и конечный сектора, используя значения по умолчанию.w
— Записывает изменения и выходит.
-
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
, для упрощения процесса и повышения его надежности. Важно всегда удостоверяться, что выбранный вами путь соответствует конкретной задаче и требованиям вашего проекта.