Терминальный метод форматирования накопителя

59

Я хочу знать, как отформатировать накопитель из терминала. Полезные вещи в ответе - часто используемые опции для команд и базовые знания, которые можно использовать для экстраполяции будущего использования. В частности, я хотел бы знать, как форматировать в различных файловых системах, таких как NTFS, FAT32, EXT4 и т. Д. Также требуется информация о том, как разделить диск через терминал.

Я пытаюсь отформатировать внешний жесткий диск большой емкости (EHDD) в NTFS - с терминала.

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

GoProCameraByGoPro
источник
1
Для тех, кто ответит: обязательно объясните опцию -mна зарезервированном месте - это актуально, потому что это интуитивно понятно.
Volker Siegel

Ответы:

66

Есть несколько вариантов:

  1. fdisk(старше, не поддерживает GPT 4 ).
  2. parted (брат CLI GParted).
  3. Различные mkfsпрограммы, если у вас уже есть разделы и вы хотите отформатировать.

fdiskи partedинтерактивны, и имеют команды помощи, поэтому вы всегда можете обратиться за помощью в программу. Оба также являются сценариями. Эти mkfsкоманды не интерактивные.


fdisk

fdiskожидает устройство (например, /dev/sda) в качестве аргумента. У него есть следующие команды:

Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the DOS compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Я не так fdiskмного использую. Я просто сосредоточусь на:


parted

partedаргумент не нужен (он пытается «угадать»), но вы всегда должны указывать диск. Учитывая выбор, partedэто программа, которую вы должны предпочесть. У него есть следующие команды:

  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  check NUMBER                             do a simple check on the file system
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkfs NUMBER FS-TYPE                      make a FS-TYPE file system on partition NUMBER
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
  resizepart NUMBER END                    resize partition NUMBER
  move NUMBER START END                    move partition NUMBER
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  resize NUMBER START END                  resize partition NUMBER and its file system
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted

Команды могут быть сокращены до уникального префикса (например, hсокращение от help).

Я собираюсь использовать временный файл ( /tmp/part), который я создал, чтобы показать вам команды, поэтому размеры будут несколько малы. Вы должны заменить это на нужное вам устройство ( /dev/sdaнапример).

Во-первых, если на вашем диске нет таблицы разделов, мы должны создать ее:

parted /tmp/part mklabel gpt

или mklabel msdos, если вам нужна вещь из 4-х первичных разделов старой школы (называемая таблицей разделов MBR или MSDOS ). Затем мы делаем, скажем, раздел ext4, начинающийся с 3 ГБ (то есть оставляя начальный 3G свободным) и размером 2 ГБ (т.е. заканчивающийся на 5 ГБ). partedожидает места в МБ для mkpartfs, но мы можем указать суффикс:

parted /tmp/part mkpart primary ext4 3G 5G

И еще один, теперь раздел NTFS 1 ГБ:

parted /tmp/part mkpart primary ntfs 5G 6G

Результат:

# parted /tmp/part print
Model:  (file)
Disk /tmp/blah: 10.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      3000MB  5000MB  2000MB               primary
 2      5000MB  6000MB  1000MB               primary  msftdata

Обратите внимание, как он использует префиксы SI, тогда как GParted стойко использует двоичные префиксы (при этом отбрасывая глупые i). Я обозначу разделы:

# parted /tmp/part name 1 hello
# parted /tmp/part name 2 world
# parted /tmp/part print
Model:  (file)
Disk /tmp/blah: 10.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name   Flags
 1      3000MB  5000MB  2000MB               hello
 2      5000MB  6000MB  1000MB               world  msftdata

Хотя он partedможет просто создавать разделы файловой системы ntfs, он не может отформатировать существующий раздел (!) В NTFS:

mkfs partition fs-type
         Make a filesystem fs-type on partition. fs-type can be one 
         of "fat16", "fat32", "ext2", "linux-swap", or "reiserfs".

Действительно, parted скажет вам, что вы должны использовать его для управления разделами, а не файловыми системами , что приводит меня к:


mkfs

mkfsПо fsckсути, это интерфейс для различных команд, специфичных для файловой системы. В моей системе, например, mkfs.bfs, mkfs.cramfs, mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.ext4dev, mkfs.fat, mkfs.minix, mkfs.msdos, mkfs.ntfs, mkfs.vfatдоступны.

Теперь, к сожалению, хотя partedфайл работает нормально, например, тот, который я использовал выше, я mkfsне могу искать разделы в таких файлах. На самом деле, он ожидает блочные устройства, поэтому, если я собираюсь использовать новый файл /tmp/fileдля mkfs, я должен заставить его сделать это. Вы будете использовать блочное устройство, соответствующее разделу, который вы хотите отформатировать, например /dev/sda2. Общий синтаксис для mkfs:

# mkfs --help
Usage: mkfs [options] [-t type fs-options] device [size]

Options:
 -t, --type=TYPE  file system type, when undefined ext2 is used
     fs-options   parameters to real file system builder
     device       path to a device
     size         number of blocks on the device
 -V, --verbose    explain what is done
                  defining -V more than once will cause a dry-run
 -V, --version    output version information and exit
                  -V as version must be only option
 -h, --help       display this help and exit

For more information, see mkfs(8).

Как вы можете видеть, -tфлаг позволяет нам передавать специфичные для файловой системы флаги. Например, флаги NTFS:

# mkfs.ntfs --help 
Usage: mkntfs [options] device [number-of-sectors]

Basic options:
    -f, --fast                      Perform a quick format
    -Q, --quick                     Perform a quick format
    -L, --label STRING              Set the volume label
    -C, --enable-compression        Enable compression on the volume
    -I, --no-indexing               Disable indexing on the volume
    -n, --no-action                 Do not write to disk

Advanced options:
    -c, --cluster-size BYTES        Specify the cluster size for the volume
    -s, --sector-size BYTES         Specify the sector size for the device
    -p, --partition-start SECTOR    Specify the partition start sector
    -H, --heads NUM                 Specify the number of heads
    -S, --sectors-per-track NUM     Specify the number of sectors per track
    -z, --mft-zone-multiplier NUM   Set the MFT zone multiplier
    -T, --zero-time                 Fake the time to be 00:00 UTC, Jan 1, 1970
    -F, --force                     Force execution despite errors

Output options:
    -q, --quiet                     Quiet execution
    -v, --verbose                   Verbose execution
        --debug                     Very verbose execution

Help options:
    -V, --version                   Display version
    -l, --license                   Display licensing information
    -h, --help                      Display this help

Developers' email address: ntfs-3g-devel@lists.sf.net
News, support and information:  http://tuxera.com

Итак, давайте создадим раздел NTFS с быстрым форматированием ( -Q), заставив его работать с файлом, не относящимся к блочным устройствам ( -F), и установив метку ( -L "hello world").

# mkfs -t ntfs -F -Q -L "hello world" /tmp/file
/tmp/file is not a block device.
mkntfs forced anyway.
The sector size was not specified for /tmp/file and it could not be obtained automatically.  It has been set to 512 bytes.
The partition start sector was not specified for /tmp/file and it could not be obtained automatically.  It has been set to 0.
The number of sectors per track was not specified for /tmp/file and it could not be obtained automatically.  It has been set to 0.
The number of heads was not specified for /tmp/file and it could not be obtained automatically.  It has been set to 0.
Cluster size has been automatically set to 4096 bytes.
To boot from a device, Windows needs the 'partition start sector', the 'sectors per track' and the 'number of heads' to be set.
Windows will not be able to boot from this device.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.

Очевидно, ему не понравилось работать с файлом. :) Не волнуйтесь, он должен автоматически определять большинство значений при работе на реальном диске. Даже этот «файл» прекрасно работает как файловая система:

# mount -t ntfs-3g /tmp/file /mnt
# touch "/mnt/a file in mnt"
# ls -l /mnt
total 0
-rwxrwxrwx 1 root root 0 Aug 29 06:43 a file in mnt
# umount /mnt
# ls -l /mnt
total 0

(Видите странные разрешения?)


Примечания:

  1. Я еще sudoнигде не использовал этот ответ. Поскольку я работал с файлами и файлами, которые мне принадлежали, мне это не нужно sudo. partedпредупредит вас об этом. Для блочных устройств, которыми обычно всегда владеют root, вам понадобится sudo(или вам придется использовать корневую оболочку через sudo -iили sudo su -).
  2. partedявляется программой GNU, и, как и многие программы GNU, имеет обширную документацию в infoформате. Установите parted-doc( sudo apt-get install parted-doc), а затем запустите info parted. Вы также можете проверить онлайн руководство пользователя .
  3. GParted может форматировать раздел в NTFS, так как он вызывает соответствующую mkfsпрограмму напрямую ( mkntfsв данном случае - mkfs.ntfsпросто ссылка на mkntfs). Он также устанавливает ряд параметров. Фактически, для большинства операций вы можете просмотреть детали сообщений GParted, чтобы увидеть, какие команды были запущены.
  4. Я не буду вдаваться в достоинства GPT по сравнению с таблицами разделов MBR / MSDOS, но GPT, скорее всего, можно найти на новых устройствах с UEFI, особенно если на них установлена ​​Windows 8. Состояние инструментов разбиения? обсуждает, какие инструменты доступны, если вы сталкиваетесь с GPT.
  5. LVM, ZFS и btrfs - это совсем другая игра. Все они имеют свои сопутствующие инструменты, и вы должны использовать их вместо partedили fdisk(за исключением, возможно, начального этапа создания разделов для их использования).

Примечание по partedиспользованию:

Синтаксис partedпрограммы:

parted [options] [device [command [options...]...]]

Когда вы запускаете partedбез команды, например:

parted /tmp/parted

Вам будет представлена ​​простая оболочка, в которой вы можете запустить вышеуказанные команды. Тем не менее, эти команды также могут быть запущены непосредственно с помощью partedпрограммы. Итак, эти три эквивалентны:

# parted /tmp/parted
GNU Parted 2.3
Using /tmp/parted
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt

А также

# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /tmp/parted
Using /tmp/parted
(parted) mklabel gpt

А также

parted /tmp/parted mklabel gpt

Также обратите внимание, что при создании разделов с partedпомощью полезного индикатора конца разделов -1s(это «1» между дефисом и «s»). Это полезно, если вы хотите, чтобы ваш раздел проходил от указанного начала до остальной части диска. Чтобы быть более конкретным, работает

parted /dev/sda -- mkpart primary ext4 3G -1s

создаст раздел, /dev/sdaкоторый начинается в 3G и заканчивается в последнем секторе /dev/sdaдиска (т. е. он простирается от 3G до всего остального диска). Обратите внимание, что --это необходимо, чтобы 1sне интерпретироваться как недопустимая опция.

Мур
источник
ИМХО, gdisk, он же GPT fdisk, превосходит
parted
1
@ FireLizzard отлично! Пожалуйста, опубликуйте ответ с подробным описанием того, как его использовать
Муру
в то время как вопрос явно о том, как отформатировать диск, почему вы даже упоминаете parted и fdisk? Вы даже упоминаете, что не можете отформатировать диск с помощью parted.
Zunder
@kreide прочитал еще раз: «Информация о том, как разделить диск через терминал, также нужна».
Муру
11

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

Linux допускает только 4 основных раздела. Вы можете иметь гораздо большее количество логических разделов, подразделяя один из основных разделов.

Только один из основных разделов может быть подразделен.

fdisk запускается путем ввода в командной строке root в качестве устройства fdisk.

Устройство может быть что-то вроде / dev / sda или / dev / sdb

Основные команды fdisk, которые вам нужны:

p print the partition table

n create a new partition

d delete a partition

q quit without saving changes

w write the new partition table and exit

Изменения, которые вы вносите в таблицу разделов, не вступают в силу, пока вы не введете команду write (w).

Вот пример таблицы разделов:

Disk /dev/sdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sdb1   *         1       184    370912+  83  Linux
/dev/sdb2           185       368    370944   83  Linux
/dev/sdb3           369       552    370944   83  Linux
/dev/sdb4           553       621    139104   82  Linux swap

Пример:

Запустите fdisk из командной строки:

sudo su
fdisk /dev/sdb 

Что означает, что вы используете второй диск на вашем контроллере SATA.

Command (m for help): p

Disk /dev/hdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

That makes for 384Mb per partition. 
Now You get to work.


Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-621, default 1):<RETURN>
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-621, default 621): +384M

Next, You set up the partition You want to use for swap:


Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (197-621, default 197):<RETURN>
Using default value 197
Last cylinder or +size or +sizeM or +sizeK (197-621, default 621): +128M

Теперь таблица разделов выглядит так:

 Device Boot      Start       End    Blocks   Id  System
/dev/sdb1             1       196    395104   83  Linux
/dev/sdb2           197       262    133056   83  Linux

Наконец, вы делаете первый раздел загрузочным:

Command (m for help): a
Partition number (1-4): 1

And You make the second partition of type swap:


Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap)      
Command (m for help): p

Конечный результат:

Disk /dev/sdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sdb1   *         1       196    395104+  83  Linux
/dev/sdb2           197       262    133056   82  Linux swap

Наконец, вы вводите команду записи (w) для записи таблицы на диск.


Утилита mkfs используется для создания файловой системы (ext2, ext3, ext4 и т. д.) в вашей системе Linux.

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

Просмотр доступных команд компоновщика файловой системы

Сборщики файловой системы (команды mkfs *) обычно ищутся в таких каталогах, как / sbin /, / sbin / fs, /sbin/fs.d, / etc / fs и / etc.

Если он не найден, он, наконец, ищет каталоги, найденные в переменной PATH.

В следующем списке показаны доступные команды mkfs * в системе.

sudo su
cd /sbin
ls mkfs*

mkfs  mkfs.bfs  mkfs.cramfs  mkfs.ext2  mkfs.ext3  mkfs.ext4  mkfs.ext4dev  
mkfs.minix  mkfs.msdos  mkfs.ntfs  mkfs.vfat

Создайте файловую систему на определенном устройстве

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

В следующем примере создается файловая система ext4 в разделе / ​​dev / sdb1.

sudo su
mkfs -t ext4 /dev/sdb1 

mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1120112 inodes, 4476416 blocks
223820 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
137 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

Обратите внимание, что тип файловой системы по умолчанию для команды mkfs - ext2.

Если вы не укажете опцию «-t», она создаст файловую систему ext2.

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


Форматировать диск NTFS

Во-первых, вам понадобится возможность создавать файловые системы NTFS, поэтому установите ntfsprogs:

sudo su 
apt-get install ntfs-3g

Во-вторых, вы стираете раздел и воссоздаете его как NTFS.

sudo su 
umount /dev/sdb1
fdisk /dev/sdb

Options to select:

    ‘d’ to delete the partition
    ‘n’ to create a new partition
    ‘p’ for primary
    ‘1’ for partition number
    ‘Enter’ for first cylinder (default 1)
    ‘Enter’ for last cylinder (default of max size)
    ‘t’ for type
    ‘L’ to list codes, and enter code for HPFS/NTFS. In my case, it’s ‘7’
    ‘w’ to write changes to disk, and exit

umount /dev/sdb1

На последнем шаге Вы размонтируете раздел, потому что Ubuntu автоматически смонтировал его для Вас.

Теперь вам нужно создать файловую систему. Есть два способа сделать это: нетерпеливый способ (Quick Format) или лучший, но гораздо более длинный способ (Full Format).

Быстрое форматирование

Это просто выделяет дисковое пространство, но не обнуляет диск и не проверяет наличие поврежденных секторов. Это означает, что это займет несколько секунд.

sudo su 
mkfs.ntfs -f /dev/sdb1

Полный формат

Если вас больше беспокоит целостность данных и вы не против подождать, сделайте полный формат.

Это может занять несколько часов, чтобы обнулить большой диск!

sudo su 
mkfs.ntfs /dev/sdb1
kyodake
источник