如何在 Linux 上對驅動器進行分割區和格式化

2018-12-02 10:12:00

這裡有所有你想知道的關於設定記憶體而又不敢問的一切。

在大多數的計算機系統上,Linux 或者是其它,當你插入一個 USB 裝置時,你會注意到一個提示驅動器存在的警告。如果該驅動器已經按你想要的進行分割區和格式化,你只需要你的計算機在檔案管理器或桌面上的某個地方列出驅動器。這是一個簡單的要求,而且通常計算機都能滿足。

然而,有時候,驅動器並沒有按你想要的方式進行格式化。對於這些,你必須知道如何查詢準備連線到您計算機上的儲存裝置。

什麼是塊裝置?

硬碟機通常被稱為“塊裝置”,因為硬碟機以固定大小的塊進行讀寫。這就可以區分硬碟機和其它可能插入到您計算機的一些裝置,如印表機、遊戲手柄、麥克風,或相機。一個簡單的方法用來列出連線到你 Linux 系統上的塊裝置就是使用 lsblk (list block devices)命令:

NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTsda                    8:0    0 238.5G  0 disk  ├─sda1                 8:1    0     1G  0 part  /boot└─sda2                 8:2    0 237.5G  0 part    └─luks-e2bb...e9f8 253:0    0 237.5G  0 crypt         ├─fedora-root    253:1    0    50G  0 lvm   /        ├─fedora-swap    253:2    0   5.8G  0 lvm   [SWAP]        └─fedora-home    253:3    0 181.7G  0 lvm   /homesdb                   8:16    1  14.6G  0 disk  └─sdb1                8:17    1  14.6G  0 part

最左列是裝置識別符號,每個都是以 sd 開頭,並以一個字母結尾,字母從 a 開始。每個塊裝置上的分割區分配一個數位,從 1 開始。例如,第一個裝置上的第二個分割區用 sda2 表示。如果你不確定到底是哪個分割區,那也不要緊,只需接著往下讀。

lsblk 命令是無失真的,僅僅用於檢測,所以你可以放心的使用而不用擔心破壞你驅動器上的資料。

使用 dmesg 進行測試

如果你有疑問,你可以通過在 dmesg 命令的最後幾行檢視驅動器的卷標,這個命令顯示了作業系統最近的紀錄檔(比如說插入或移除一個驅動器)。一句話,如果你想確認你插入的裝置是不是 /dev/sdc ,那麼,把裝置插到你的計算機上,然後執行這個 dmesg 命令:

$ sudo dmesg | tail

顯示中列出的最新的驅動器就是你剛剛插入的那個。如果你拔掉它,並再執行這個命令一次,你可以看到,這個裝置已經被移除。如果你再插上它再執行命令,這個裝置又會出現在那裡。換句話說,你可以監控核心對驅動器的識別。

理解檔案系統

如果你只需要裝置卷標,那麼你的工作就完成了。但是如果你的目的是想建立一個可用的驅動器,那你還必須給這個驅動器做一個檔案系統。

如果你還不知道什麼是檔案系統,那麼通過了解當沒有檔案系統時會發生什麼可能會更容易理解這個概念。如果你有多餘的裝置驅動器,並且上面沒有什麼重要的資料資料,你可以跟著做一下下面的這個實驗。否則,請不要嘗試,因為根據其設計目的,這個肯定會刪除您的資料。

當一個驅動器沒有檔案系統時也是可以使用的。一旦你已經肯定,正確識別了一個驅動器,並且已經確定上面沒有任何重要的資料,那就可以把它插到你的計算機上 —— 但是不要掛載它,如果它被自動掛載上了,那就請手動解除安裝掉它。

$ su -# umount /dev/sdx{,1}

為了防止災難性的複製 —— 貼上錯誤,下面的例子將使用不太可能出現的 sdx 來作為驅動器的卷標。

現在,這個驅動器已經被解除安裝了,嘗試使用下面的命令:

# echo 'hello world' > /dev/sdx

你已經可以將資料寫入到塊裝置中,而無需將其掛載到你的作業系統上,也不需要一個檔案系統。

再把剛寫入的資料取出來,你可以看到驅動器上的原始資料:

# head -n 1 /dev/sdxhello world

這看起來工作得很好,但是想象一下如果 “hello world” 這個短語是一個檔案,如果你想要用這種方法寫入一個新的檔案,則必須:

  1. 知道第 1 行已經存在一個檔案了
  2. 知道已經存在的檔案只佔用了 1 行
  3. 建立一種新的方法來在後面新增資料,或者在寫第 2 行的時候重寫第 1 行

例如:

# echo 'hello world> this is a second file' >> /dev/sdx

獲取第 1 個檔案,沒有任何改變。

# head -n 1 /dev/sdxhello world

但是,獲取第 2 個檔案的時候就顯得有點複雜了。

# head -n 2 /dev/sdx | tail -n 1this is a second file

顯然,通過這種方式讀寫資料並不實用,因此,開發人員建立了一個系統來跟蹤檔案的組成,並標識一個檔案的開始和結束,等等。

大多數的檔案系統都需要一個分割區。

建立分割區

分割區是硬碟機的一種邊界,用來告訴檔案系統它可以佔用哪些空間。舉例來說,你有一個 4GB 的 USB 驅動器,你可以只分一個分割區佔用一個驅動器 (4GB),或兩個分割區,每個 2GB (又或者是一個 1GB,一個 3GB,只要你願意),或者三個不同的尺寸大小,等等。這種組合將是無窮無盡的。

假設你的驅動器是 4GB,你可以使用 GNU parted 命令來建立一個大的分割區。

# parted /dev/sdx --align opt mklabel msdos 0 4G

parted 命令的要求,首先指定了驅動器的路徑。

--align 選項讓 parted 命令自動選擇一個最佳的開始點和結束點。

mklabel 命令在驅動器上建立了一個分割區表 (稱為磁碟卷標)。這個例子使用了 msdos 磁碟卷標,因為它是一個非常相容和流行的卷標,雖然 gpt 正變得越來越普遍。

最後定義了分割區所需的起點和終點。因為使用了 --align opt 標誌,所以 parted 將根據需要調整大小以優化驅動器的效能,但這些數位仍然可以做為參考。

接下來,建立實際的分割區。如果你開始點和結束點的選擇並不是最優的, parted 會向您發出警告並讓您做出調整。

# parted /dev/sdx -a opt mkpart primary 0 4GWarning: The resulting partition is not properly aligned for best performance: 1s % 2048s != 0sIgnore/Cancel? C                                                          # parted /dev/sdx -a opt mkpart primary 2048s 4G

如果你再次執行 lsblk 命令,(你可能必須要拔掉驅動器,並把它再插回去),你就可以看到你的驅動器上現在已經有一個分割區了。

手動建立一個檔案系統

我們有很多檔案系統可以使用。有些是開源和免費的,另外的一些並不是。一些公司拒絕支援開原始檔系統,所以他們的使用者無法使用開源的檔案系統讀取,而開源的使用者也無法在不對其進行逆向工程的情況下從封閉的檔案系統中讀取。

儘管有這種特殊的情況存在,還是仍然有很多檔案系統可以使用,選擇哪個取決於驅動器的用途。如果你希望你的驅動器相容多個系統,那麼你唯一的選擇是 exFAT 檔案系統。然而微軟尚未向任何開源核心提交 exFAT 的程式碼,因此你可能必須在軟體包管理器中安裝 exFAT 支援,但是 Windows 和 MacOS 都支援 exFAT 檔案系統。

一旦你安裝了 exFAT 支援,你可以在驅動器上你建立好的分割區中建立一個 exFAT 檔案系統。

# mkfs.exfat -n myExFatDrive /dev/sdx1

現在你的驅動器可由封閉系統和其它開源的系統(尚未經過微軟批准)核心模組進行讀寫了。

Linux 中常見的檔案系統是 ext4。但對於便攜式的裝置來說,這可能是一個麻煩的檔案系統,因為它保留了使用者的許可權,這些許可權通常因為計算機而異,但是它通常是一個可靠而靈活的檔案系統。只要你熟悉管理許可權,那 ext4 對於便攜式的裝置來說就是一個很棒的檔案系統。

# mkfs.ext4 -L myExt4Drive /dev/sdx1

拔掉你的驅動器,再把它插回去。對於 ext4 檔案系統的便攜裝置來說,使用 sudo 建立一個目錄,並將該目錄的許可權授予使用者和系統中通用的組。如果你不確定使用哪個使用者和組,也可以使用 sudoroot 來修改出現問題的裝置的讀寫許可權。

使用桌面工具

很高興知道了在只有一個 Linux shell 的時候如何操作和處理你的塊裝置,但是,有時候你僅僅是想讓一個驅動器可用,而不需要進行那麼多的檢測。 GNOME 的 KDE 的開發者們提供了這樣的一些優秀的工具讓這個過程變得簡單。

GNOME 磁碟KDE 分割區管理器 是一個圖形化的工具,為本文到目前為止提到的一切提供了一個一體化的解決方案。啟動其中的任何一個,來檢視所有連線的裝置(在左側列表中),建立和調整分割區大小,和建立檔案系統。

KDE 分區管理器

KDE 分割區管理器

可以預見的是,GNOME 版本會比 KDE 版本更加簡單,因此,我將使用複雜的版本進行演示——如果你願意動手的話,很容易弄清楚 GNOME 磁碟工具的使用。

啟動 KDE 分割區管理工具,然後輸入你的 root 密碼。

在最左邊的一列,選擇你想要格式化的驅動器。如果你的驅動器並沒有列出來,確認下是否已經插好,然後選擇 “Tools > Refresh devices” (或使用鍵盤上的 F5 鍵)。

除非你想銷毀驅動器已經存在的分割區表,否則請勿繼續。選擇好驅動器後,單擊頂部工具列中的 “New Partition Table” 。系統會提示你為該分割區選擇一種捲標:gpt 或 msdos 。前者更加靈活可以處理更大的驅動器,而後者像很多微軟的技術一樣,是佔據大量市場份額的事實上的標準。

現在您有了一個新的分割區表,在右側的面板中右鍵單擊你的裝置,然後選擇 “New” 來建立新的分割區,按照提示設定分割區的型別和大小。此操作包括了分割區步驟和建立檔案系統。

創建一個新分區

建立一個新分割區

要將更改應用於你的驅動器,單擊視窗左上角的 “Apply” 按鈕。

硬碟機,輕鬆驅動

在 Linux 上處理硬碟機很容易,甚至如果你理解硬碟機的語言就更容易了。自從切換到 Linux 系統以來,我已經能夠以任何我想要的方式來處理我的硬碟機了。由於 Linux 在處理儲存提供的透明性,因此恢復資料也變得更加容易了。

如果你想實驗並了解有關硬碟機的更多的資訊,請參考下面的幾個提示:

  1. 備份您的資料,而不僅僅是你在實驗的驅動器上。僅僅需要一個小小的錯誤操作來破壞一個重要驅動器的分割區。(這是一個用來學習重建丟失分割區的很好的方法,但並不是很有趣)。
  2. 反復確認你所定位的驅動器是正確的驅動器。我經常使用 lsblk 來確定我並沒有移動驅動器。(因為從兩個獨立的 USB 埠移除兩個驅動器很容易,然後以不同的順序重新連線它們,就會很容易導致它們獲得了新的驅動器標籤。)
  3. 花點時間“銷毀”你測試的驅動器,看看你是否可以把資料恢復。在刪除檔案系統後,重新建立分割區表或嘗試恢復資料是一個很好的學習體驗。

還有一些更好玩的東西,如果你身邊有一個封閉的作業系統,在上面嘗試使用一個開源的檔案系統。有一些專案致力於解決這種相容性,並且嘗試讓它們以一種可靠穩定的方式工作是一個很好的業餘專案。