Terminalowa metoda formatowania dysku

59

Chcę wiedzieć, jak sformatować dysk pamięci masowej z terminala. W odpowiedzi pomocne byłyby często opcje poleceń i wiedza podstawowa, których można użyć do ekstrapolacji przyszłych zastosowań. W szczególności chciałbym wiedzieć, jak formatować w różnych systemach plików, takich jak NTFS, FAT32, EXT4 itp. Potrzebne są również informacje na temat partycjonowania dysku za pomocą terminala.

Próbuję sformatować zewnętrzny dysk twardy o dużej pojemności (EHDD) do NTFS - z terminala.

Wiem, że mogę używać gparted do tego, jak również innych programów GUI, ale nadal chcę teraz, jak to zrobić z terminala.

GoProCameraByGoPro
źródło
1
Ktokolwiek będzie wstawiał: upewnij się, że wyjaśniłeś opcję -mzarezerwowanego miejsca - jest to istotne, ponieważ jest to interpretacja intuicyjna.
Volker Siegel

Odpowiedzi:

66

Dostępnych jest kilka opcji:

  1. fdisk(starszy, nie obsługuje GPT 4 ).
  2. parted (brat CLI z GParted).
  3. Różne mkfsprogramy, jeśli masz już partycje i chcesz sformatować.

fdiski partedsą interaktywne oraz mają komendy pomocy, dzięki czemu zawsze możesz szukać pomocy w programie. Oba są również skryptowalne. Te mkfspolecenia nie są interaktywne.


fdisk

fdiskoczekuje urządzenia (takiego jak /dev/sda) jako argumentu. Ma następujące polecenia:

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)

Nie używam fdiskdużo. Skupię się na:


parted

partednie potrzebuje argumentu (próbuje „zgadnąć”), ale zawsze powinieneś określać dysk. Biorąc pod uwagę wybór, partednależy wybrać program. Ma następujące polecenia:

  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

Komendy można zawrzeć w unikalnym prefiksie (np. hJest skrótem od help).

Użyję pliku tymczasowego ( /tmp/part), który utworzyłem, aby pokazać ci polecenia, więc rozmiary będą nieco małe. Powinieneś zastąpić to urządzeniem, którego potrzebujesz ( /dev/sdana przykład).

Po pierwsze, jeśli twój dysk nie ma tablicy partycji, musimy ją utworzyć:

parted /tmp/part mklabel gpt

lub mklabel msdos, jeśli chcesz starej 4 partycji podstawowej (zwanej tabelą partycji MBR lub MSDOS ). Następnie wykonujemy, powiedzmy, partycję ext4 zaczynającą się od 3 GB (tj. Pozostawiając początkową 3G wolną) i o rozmiarze 2 GB (tj. Kończącą się na 5 GB). partedoczekuje lokalizacji w MB dla mkpartfs, ale możemy określić przyrostek:

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

I kolejna, teraz partycja NTFS 1 GB:

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

Wynik:

# 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

Zwróć uwagę, w jaki sposób używa prefiksów SI, podczas gdy GParted niezmiennie używa prefiksów binarnych (porzucając głupie i). Oznaczę partycje:

# 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

Chociaż partedmożna dobrze tworzyć partycje systemu plików ntfs, nie można sformatować istniejącej partycji (!) Do 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".

Rzeczywiście, parted powie ci, że powinieneś używać go do manipulowania partycjami, a nie systemami plików , co prowadzi mnie do:


mkfs

mkfs, podobnie fsck, jest zasadniczo nakładką na różne polecenia specyficzne dla systemu plików. W moim systemie na przykład mkfs.bfs, mkfs.cramfs, mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.ext4dev, mkfs.fat, mkfs.minix, mkfs.msdos, mkfs.ntfs, mkfs.vfatsą dostępne.

Teraz, niestety, chociaż parteddziała dobrze na pliku, takim jak ten, którego użyłem powyżej, mkfsnie mogę iść na polowanie na partycje w takich plikach. W rzeczywistości, to oczekuje blokowania urządzenia, więc jeśli mam zamiar wykorzystać nowy plik /tmp/filedla mkfsmam zmusić go zrobić. Użyjesz urządzenia blokowego odpowiadającego partycji, którą chcesz sformatować, np /dev/sda2. Ogólna składnia dla 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).

Jak widać, -tflaga pozwala nam przekazywać flagi specyficzne dla systemu plików. Na przykład flagi 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: [email protected]
News, support and information:  http://tuxera.com

Stwórzmy partycję NTFS z szybkim formatowaniem ( -Q), zmuszając ją do działania na pliku nieblokującym urządzenia ( -F) i ustawiając etykietę ( -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.

Najwyraźniej praca z plikiem nie sprawiała mu przyjemności. :) Nie martw się, powinien automatycznie wykryć większość wartości podczas pracy na rzeczywistym dysku. Nawet ten „plik” działa dobrze jako system plików:

# 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

(Zobacz dziwne uprawnienia?)


Uwagi:

  1. sudoNigdzie nie użyłem jeszcze w tej odpowiedzi. Ponieważ działałem na plikach i plikach należących do mnie, nie potrzebowałem sudo. partedostrzeże cię przed tym. W przypadku urządzeń blokowych, które zwykle są zawsze własnością root, będziesz potrzebować sudo(lub będziesz musiał użyć powłoki roota za pomocą sudo -ilub sudo su -).
  2. partedjest programem GNU i, podobnie jak wiele programów GNU, ma obszerną dokumentację w infoformacie. Zainstaluj parted-doc( sudo apt-get install parted-doc), a następnie uruchom info parted. Możesz także sprawdzić instrukcję obsługi online .
  3. GParted jest w stanie sformatować partycję do NTFS, ponieważ mkfsbezpośrednio wywołuje odpowiedni program ( mkntfsw tym przypadku - mkfs.ntfsto tylko łącze do mkntfs). Ustawia również szereg parametrów. W rzeczywistości dla większości operacji możesz sprawdzić szczegóły wiadomości GParted, aby zobaczyć, które polecenia zostały uruchomione.
  4. Nie będę wchodził w zalety Tabeli partycji GPT vs. MBR / MSDOS, ale GPT prawdopodobnie znajdzie się na nowych urządzeniach z UEFI, szczególnie jeśli masz na nich Windows 8. Stan narzędzi do partycjonowania? omawia, jakie narzędzia są dostępne, jeśli masz do czynienia z GPT.
  5. LVM, ZFS i btrfs to zupełnie inna gra. Wszystkie mają narzędzia towarzyszące i należy ich używać zamiast partedlub fdisk(z wyjątkiem być może pierwszego kroku tworzenia partycji do ich użycia).

Uwaga dotycząca partedużytkowania:

Składnia partedprogramu jest następująca:

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

Po uruchomieniu partedbez polecenia, na przykład:

parted /tmp/parted

Otrzymasz prostą powłokę, w której możesz uruchomić powyższe polecenia. Jednak te polecenia można również uruchamiać bezpośrednio za pomocą partedprogramu. Te trzy są równoważne:

# 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

I

# 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

I

parted /tmp/parted mklabel gpt

Zauważ również, że podczas tworzenia partycji z partedużytecznym wskaźnikiem końca partycji jest -1s(jest to „1” między łącznikiem a „s”). Jest to przydatne, jeśli chcesz, aby twoja partycja rozciągała się od określonego początku do reszty dysku. Aby być bardziej szczegółowym, bieganie

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

utworzy partycję, /dev/sdaktóra zaczyna się od 3G i kończy na ostatnim sektorze /dev/sdadysku (tzn. rozciąga się od 3G do całej pozostałej części dysku). Należy pamiętać, że --jest to konieczne, aby 1snie być interpretowane jako niepoprawna opcja.

muru
źródło
IMHO, gdisk, aka GPD fdisk, jest lepszy od
rozstanego
1
@FireLizzard doskonała! Proszę zamieścić odpowiedź opisującą szczegółowo, jak z niego korzystać.
muru
pytanie dotyczy tego, jak sformatować dysk, dlaczego nawet wspominasz o parted i fdisk? Wspominasz nawet o sobie, że nie można sformatować dysku z partycją.
zunder 22.04.16
@kreide ponownie przeczytał: „Potrzebne są również informacje na temat partycjonowania dysku za pomocą terminala”.
mur 22.04.16
11

Najpierw musisz podzielić dysk twardy na partycje za pomocą narzędzia fdisk.

Linux pozwala tylko na 4 główne partycje. Możesz mieć znacznie większą liczbę partycji logicznych, dzieląc jedną z głównych partycji.

Tylko jedną z podstawowych partycji można podzielić.

fdisk jest uruchamiany przez wpisanie jako root urządzenia fdisk w wierszu polecenia.

Urządzeniem może być coś takiego jak / dev / sda lub / dev / sdb

Podstawowe potrzebne polecenia fdisk to:

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

Zmiany, które wprowadzisz w tabeli partycji, zaczną obowiązywać dopiero po wydaniu polecenia write (w).

Oto przykładowa tabela partycji:

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

Przykład:

Uruchom fdisk z wiersza poleceń powłoki:

sudo su
fdisk /dev/sdb 

Co oznacza, że ​​używasz drugiego dysku w kontrolerze 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

Teraz tabela partycji wygląda następująco:

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

Na koniec możesz uruchomić pierwszą partycję:

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

Wynik końcowy:

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

Na koniec wydajesz polecenie zapisu (w), aby zapisać tabelę na dysku.


Narzędzie mkfs służy do tworzenia systemu plików (ext2, ext3, ext4 itp.) w systemie Linux.

Należy podać nazwę urządzenia dla mkfs, na którym ma zostać utworzony system plików.

Wyświetl dostępne polecenia Konstruktora systemu plików

Konstruktory systemów plików (komendy mkfs *) są zwykle przeszukiwane w katalogach takich jak / sbin /, / sbin / fs, /sbin/fs.d, / etc / fs i / etc.

Jeśli nie zostanie znaleziony, w końcu przeszukuje katalogi znalezione w zmiennej PATH.

Poniższa lista pokazuje dostępne polecenia mkfs * w systemie.

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

Zbuduj system plików na określonym urządzeniu

Aby zbudować system plików za pomocą komendy mkfs, wymagane argumenty to nazwa-urządzenia i typ systemu plików, jak pokazano poniżej.

Poniższy przykład tworzy system plików ext4 na partycji / 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   

Należy pamiętać, że domyślnym typem systemu plików dla komendy mkfs jest ext2.

Jeśli nie określisz opcji „-t”, utworzy system plików ext2.

Możesz także użyć metody, którą omówiliśmy wcześniej, aby określić, czy masz system plików ext2, ext3 lub ext4.


Sformatuj dysk NTFS

Po pierwsze, będziesz potrzebować umiejętności tworzenia systemów plików NTFS, więc zainstaluj ntfsprogs:

sudo su 
apt-get install ntfs-3g

Po drugie, wysadzasz partycję i tworzysz ją ponownie jako 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

W ostatnim kroku odmontujesz partycję, ponieważ Ubuntu ponownie zamontował ją dla Ciebie.

Teraz musisz utworzyć system plików. Można to zrobić na dwa sposoby: niecierpliwy (szybki format) lub lepszy, ale znacznie dłuższy (pełny format).

Szybkie formatowanie

To tylko przydziela miejsce na dysku, ale nie zeruje dysku ani nie sprawdza uszkodzonych sektorów. Oznacza to, że zajmie to kilka sekund.

sudo su 
mkfs.ntfs -f /dev/sdb1

Pełny format

Jeśli bardziej martwisz się integralnością danych i nie masz nic przeciwko czekaniu, zrób pełny format.

Wyzerowanie dużego dysku może potrwać kilka godzin!

sudo su 
mkfs.ntfs /dev/sdb1
Kyodake
źródło