格式化儲存磁碟機的終端方法

格式化儲存磁碟機的終端方法

我想知道如何從終端格式化儲存磁碟機。在答案中提供的有用內容通常是命令選項和基礎知識,可以用來推斷未來的用途。具體來說,我想知道如何在不同的檔案系統(例如 NTFS、FAT32、EXT4 等)中進行格式化。

我正在嘗試從終端將高容量外部硬碟 (EHDD) 格式化為 NTFS。

我知道我可以使用 gparted 以及其他 GUI 程式來實現此目的,但我現在仍然想知道如何從終端執行此操作。

答案1

有幾個選項可供選擇:

  1. fdisk
  2. parted(GParted 的 CLI 兄弟)。
  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 分割區,從 3GB 開始(即,保留最初的 3G 空閒),大小為 2GB(即,以 5GB 結束)。parted預計 的位置以 MB 為單位mkpartfs,但我們可以指定後綴:

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

還有一個,現在是 1GB 的 NTFS 分割區:

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.bfsmkfs.cramfsmkfs.ext2mkfs.ext3mkfs.ext4mkfs.ext4devmkfs.fatmkfs.minix、、 、mkfs.msdos可用。mkfs.ntfsmkfs.vfat

現在,不幸的是,雖然parted對文件運行得很好,就像我上面使用的那樣,但mkfs無法在此類文件中尋找分區。事實上,它需要塊設備,因此如果我要使用新文件/tmp/filemkfs我必須強制它這樣做。您將使用與要格式化的分割區相對應的區塊設備,例如/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: [email protected]
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或使用 root shell 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 完全是另一回事。它們都有附帶的工具,您應該使用它們而不是partedfdisk(建立分割區供其使用的初始步驟可能除外)。

使用注意parted事項:

該程式的語法parted是:

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

當您在parted沒有命令的情況下運行時,例如:

parted /tmp/parted

您將看到一個簡單的 shell,您可以在其中執行上述命令。但是,這些命令也可以直接使用程式運行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(這是連字符和“s”之間的“1”)。如果您希望分割區從指定的起始位置跨越到磁碟的其餘部分,這非常有用。更具體地說,運行

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

將建立一個/dev/sda從 3G 開始到磁碟最後一個磁區結束的分割區/dev/sda(即它跨越從 3G 到磁碟的整個剩餘部分)。請注意,這--是必需的,以免1s被解釋為無效選項。

答案2

首先,您將了解如何使用 fdisk 公用程式對硬碟進行實際分割區。

Linux 只允許有 4 個主分割區。透過細分主分割區之一,您可以擁有更多數量的邏輯分割區。

只能對其中一個主分區進行細分。

透過在命令提示字元下鍵入 root fdisk device 來啟動 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

例子:

從 shell 提示字元啟動 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 實用程式用於在 Linux 系統上建立檔案系統(ext2、ext3、ext4 等)。

您應該為要在其上建立檔案系統的 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 命令建立檔案系統,所需的參數是設備檔案名稱和檔案系統類型,如下所示。

以下範例在 /dev/sdb1 分割區上建立 ext4 檔案系統。

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 會自動為您重新安裝它。

現在,您需要建立檔案系統。有兩種方法可以實現:不耐煩的方法(快速格式化),或更好但更長的方法(完整格式)。

快速格式化

這只是分配磁碟空間,但不會將磁碟機清零或檢查壞磁區。這意味著需要幾秒鐘的時間。

sudo su 
mkfs.ntfs -f /dev/sdb1

完整格式

如果您更關心資料完整性並且不介意等待,請執行完整格式化。

這可能需要幾個小時才能將大型驅動器歸零!

sudo su 
mkfs.ntfs /dev/sdb1

相關內容