這篇談的是在Linux電腦裝上新硬碟,大概需要做哪些事,算是玩Raspberry Pi的心得筆記。於是我又把塵封的指令書拿來翻,將用到指令 lsblk、fdisk、gdisk、mkfs.ext4。這篇文就是我沉迷Raspberry Pi才催生,所有示範都在Raspberry Pi。希望各位能跟迷你企鵝相處愉快~‵(*∩_∩*)′
首先,將(外接)硬碟接上...
注意:Raspberry Pi 連接USB外接硬碟要有外接電源,不可以依賴Raspberry Pi USB上的電源。
Raspbian 或其他Linux 電腦裝上未分割硬碟大概會分以下5個流程:
這篇文的目錄:
1. Linux 磁碟分割概念
1-1. MBR和GPT分割表
1-2. 介紹lsblk指令
2. fidsk指令
2-1. fdisk查詢用途
2-2. 創建分割區
3.gdisk的用法
4. mkfs.ext4指令(格式化)
附錄:4K對齊問題(講古)
1. Linux 磁碟分割概念
如果你之前用過 Windows,一定有C槽、D槽...等觀念。但Linux下觀念不同,「根」目錄(就是符號「/」)是起點,像樹幹上長樹枝一樣,所有目錄都得從根開始掛載,儲存裝置也不例外。
若我在Raspberry Pi的USB插上一顆硬碟,該裝置會有目錄/dev/sda,再插第二個硬碟/dev/sdb,以此類推。第一顆硬碟的第一個分割區(類似Windows「槽」的觀念),目錄定為/dev/sda1;第二個分割區/dev/sda2…等,看看下面那張圖,比較容易理解。當然,如果沒有分割區的空白磁碟不會出現。
▼ Linux 檔案目錄與裝置、分割區示意圖
1-1. MBR和GPT分割表
MBR(Master Boot Record)分割表
MBR分割表可切成4個主分割區(primary partition), 裝置名稱末碼由1~4,可用來開機或放資料。如果還需更多分割區,可以將一個主分割區改成延伸分割區(extended partition),把延伸分割區想成空盒子,也占用主分割區的一個號碼。然後將可以切成很多(我也不記得上限)個邏輯分割區(logical partition),邏輯分割區從5開始跳, 5、6、7 ... 開始數起,邏輯分區只能放資料,不能開機。要注意一點,只能定址到2TiB,之後的容量無法使用,也就是說你買3TB以上的硬碟,就必須改用GPT分割表。
GPT(GUID Partition Table, GPT)分割表
改用GPT分割表,會建立分割表副本來防止損壞,能建128個主分割區,定址能力達到 8 ZiB,如果想看更多規格經,詳見:GUID磁碟分割表。當然,GPT在未來鐵定是主流。
而我們下面一張要題的fdisk只支援MBR分割表,就是只支援到2TiB;3TB以上的硬碟,就得出動gdisk來處理,你可以先跳下一章《3. gdisk工具》,也不用太擔心,gdisk用法和fidsk差不多。
寫這麼多,我在使用方法上只有個小結論:3TB以下用MBR分割表,工具用fidsk;3TB以上用GPT分割表,工具用gdisk。
1-2. 介紹lsblk指令
順到介紹一個指令lsblk, list block device,列出所有儲存裝置,以樹狀圖顯示。我的Raspberry Pi上面有一張8 GB micro SD ×1、320GB外接硬碟(切成2個分割區)、32GB隨身碟。
$ lsblk
#列出所有儲存裝置
▼結果展示如下
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298.1G 0 disk
├─sda1 8:1 0 150G 0 part /media/data1
└─sda2 8:2 0 148.1G 0 part /media/data2
sdb 8:16 1 29.9G 0 disk
└─sdb1 8:17 1 29.9G 0 part /media/
mmcblk0 179:0 0 7.4G 0 disk
├─mmcblk0p1 179:1 0 56M 0 part /boot
└─mmcblk0p2 179:2 0 7.4G 0 part
▲大概說明:
MAJ:MIN:核心裝置代碼,主裝置:次裝置。
RM:是否為可卸除裝置
RO:是否唯讀
TYPE:是儲存裝置顯示disk,分割區顯示part
MOUNTPOINT:掛載路徑
也可以只列單一裝置,把sda換成你的裝置名稱,接下來我們會常常用到喔!
$ lsblk /dev/sda
#只列出sda裝置的訊息
#其他資訊:如果碰到早期的IDE硬碟,命名方法可能是hda、hdb、hdc…以此類推;SATA 和 SCSI 硬碟,都還是和本文一樣 sda、sdb、sdc...等。
如果你的硬碟數量多,碰到多顆同一容量,有混淆的問題,或需要專業化的管理,要使用UUID全域單一識別碼 (universally unique identifier)要參考 blkid指令,可以參考鳥哥的:第七章、Linux 磁碟與檔案系統管理。
2. fdisk工具
fdisk用來搞定MBR分割表;或查詢分割區大小、容量、磁區(Sector)...等。
你想查fdisk詳細用法,可以加上用-h參數
$ sudo fdisk –h
2-1. fdisk查詢用途
$ sudo fdisk –l
#不指定路徑,將所有儲存裝置參數和分割區列出
$ sudo fdisk –l /dev/sda
#將該裝置的分割區和參數
個人感覺下面-s的用法沒那麼重要,我覺得看看就算了~
$ sudo fdisk –s /dev/sda
#查詢硬碟容量,說明文件談到數字代表邏輯區塊( Block ),實際上的意義是KiB
$ sudo fdisk –s /dev/sda2
#這用法跟上面差不多,但指定分割區
大多只用$ sudo fidisk –l,當然是儲存裝置並不多,雖然參數-s可以查詢硬碟容量,但會被參數-l大幅取代。
2-2. 創建分割區
如果硬碟裡面有要的資料,請記得備份,變更分割區會造成資料遺失!
*如過之前有用Windosws規劃過分割表,請先跳到下面< fdisk示範四>,將分割區刪除,變成空白磁區,以便接下來的練習。
我找了一顆標示320GB的硬碟示範,實際可用容量大概 298.1GB。如下圖▼,磁碟分割把它假想成從Star Sector到End Sector那條線要分成幾段。
fdisk示範一:將整顆硬碟劃成一個分區,如下圖▼
$ sudo fdisk /dev/sda
如果你了解更多參數細節,可以按下m,如果只想試著操作或操作失誤,可以按下q不變更離開。
按n創建新的分區,接下來敲四下Enter鍵,確認以下四個項目維持預設值,多按了也不用擔心。最後輸入w寫入並離開。
fdisk示範二:規劃2個主分割區,如下圖▼
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #Enter=預設 建立第一個主要分割區
Partition number (1-4, default 1): 1 #Enter=預設 設定分割區的編號為1
First sector (2048-625140334, default 2048): #Enter=預設 起始磁區2048
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-625140334, default 625140334): +100G #要求100GiB空間
Command (m for help): n #創建一個分割區
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p #Enter=預設 建立第二個主要分割區
Partition number (1-4, default 2): 2 #Enter=預設 設定分割區的編號為2
First sector (209717248-625140334, default 209717248): #Enter=預設 接續用第一分割區後的磁區
Using default value 209717248
Last sector, +sectors or +size{K,M,G} (209717248-625140334, default 625140334): #Enter=預設 到最後一個磁區結束,就是使用完整容量
Using default value 625140334
Command (m for help): w #寫入
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
驗證:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298.1G 0 disk
├─sda1 8:1 0 100G 0 part
└─sda2 8:2 0 198.1G 0 part
fdisk示範三:規劃1個主分割區2個邏輯分割區,如下圖▼
#不過各位知道我愛摸魚,如果要切100、99、99 GiB,我會切出三個都是主分割區,這題當然是為了讓各位了解特別設計的。
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-625140334, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-625140334, default 625140334): +100G
#前面的部分我就不註解了
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e #先建立延伸分割區
Partition number (1-4, default 2): 2
First sector (209717248-625140334, default 209717248): #Enter=預設 要求延伸分割區的起始磁區,也是接續第一分割區
Using default value 209717248
Last sector, +sectors or +size{K,M,G} (209717248-625140334, default 625140334): #Enter=預設 到硬碟最後一個磁區
Using default value 625140334
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l #輸入l 建立第一個邏輯分割區
Adding logical partition 5
First sector (209719296-625140334, default 209719296):
Using default value 209719296
Last sector, +sectors or +size{K,M,G} (209719296-625140334, default 625140334): +99G #要求99GiB的容量
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p):l #輸入l 建立第二個邏輯分割區
Adding logical partition 6
First sector (417339392-625140334, default 417339392):
Using default value 417339392 #
Last sector, +sectors or +size{K,M,G} (417339392-625140334, default 625140334):
Using default value 625140334
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
驗證:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298.1G 0 disk
├─sda1 8:1 0 100G 0 part
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 99G 0 part
└─sda6 8:6 0 99.1G 0 part
fdisk示範四:打掉所有的分割區
Command (m for help): d #刪除延伸分割區
Partition number (1-6): 2
Command (m for help): d #刪除主要分割區
Selected partition 1
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298.1G 0 disk
3. gdisk工具
這套工具就是為了GPT分割表的,Raspberry Pi沒有內建,必須另外安裝。操作方式和fdisk差不多。
$ sudo apt-get install gdisk
#安裝gdisk
gdisk示範一:規劃2個主分割區,100GiB和198GiB,硬碟總容量298GiB
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format.
THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if
you don't want to convert your MBR partitions to GPT format!
***************************************************************
Command (? for help): n #創建第一個分區
Partition number (1-128, default 1): #Enter 預設1
First sector (34-625140301, default = 2048) or {+-}size{KMGTP}: #Enter 預設2048
Last sector (2048-625140301, default = 625140301) or {+-}size{KMGTP}: +100G #要求100GiB的空間
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): n #創建第二個分區
Partition number (2-128, default 2): #Enter 預設2
First sector (34-625140301, default = 209717248) or {+-}size{KMGTP}: #Enter 預設接續之前的分區
Last sector (209717248-625140301, default = 625140301) or {+-}size{KMGTP}: #Enter 預設到結束磁區
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): w #寫入
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!! #警告標語
Do you want to proceed? (Y/N): y #再次確認,輸入y執行
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
gdisk查詢
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): i #輸入i查詢分區
Partition number (1-2): 1 #輸入1分區代碼
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: 30AFE8B9-1F84-4326-BC55-ECBC9E97EA79
First sector: 2048 (at 1024.0 KiB) #分區的起始磁區
Last sector: 209717247 (at 100.0 GiB) #分區的結束磁區(在100GiB位置)
Partition size: 209715200 sectors (100.0 GiB)
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'
Command (? for help): i
Partition number (1-2): 2
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: A4ACCF3E-0F98-4B90-942D-37E69B11E494
First sector: 209717248 (at 100.0 GiB) #分區的起始磁區(從100GiB的位置)
Last sector: 625140301 (at 298.1 GiB) #分區的結束磁區(在298GiB的位置)
Partition size: 415423054 sectors (198.1 GiB) #分區容量
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'
Command (? for help): q #結束
4. mkfs.ext4指令(格式化)
mkfs是建置檔案系統 (make filesystem)的縮寫,就是俗稱的格式化,後面接ext4是代表要使用的格式。
$ sudo mkfs.ext4 -L Data /dev/sda1
mkfs.ext4 [-b size] [-L label] 分割區目錄
參數說明:
-L:後面接這個裝置的目錄名稱。
-b:設定區塊 block 單位是byte,是檔案系統內容最小的單位,可以用1024、2048、4096,如果不使用該參數,代表預設是4096至於這參數,
如果設定數值大:降低讀寫的頻率,加快大檔讀寫。缺點:浪費較多空間。如果設定較小,優缺點都會反過來。做個比喻,如果有個檔案佔1KiB,放入區塊4KiB的分割區內,就是占用4KiB,造成3KiB的空間浪費。不過,我通常還是維持預設,除非有該分區預計要存入大量小檔案。若之後要重設,就得重新格式化。
如果您有進階需求,比如說:要格式化成ext3、ext2、xfs...等,或是有志之士想研究Inode數目、大小...等設定,請參考:
格式化存儲裝置成為 Ext2/Ext3/Ext4 檔案系統
鳥哥的 Linux 私房菜:第七章、Linux 磁碟與檔案系統管理
在U盘上安装 Arch Linux (2013-07)
附錄 4K對齊的問題(講古)
傳統硬碟採的磁區(Sector)是512 Byte,這是該裝置最小的儲存單位,但2010年之後先進格式化( Advanced Format)的硬碟和固態硬碟(Solid State Disk、Solid State Drive, SSD)採用4KiB磁區。因傳統硬碟分割邏輯,設定第63個磁軌(track)或稱磁柱(cylinder)開始,而4K設備的起始磁區需被8整除<5>(512 Byte × 8 = 4KiB),63不是8的倍數,如果舊的作業系統(例:Windows XP)例如或磁碟分割工具認不得4K的設備,舊的邏輯套用在4KiB磁區的設備上,會造成檔案系統(file system)的叢集(cluster)跨區,聽不懂可以參考:SSD 新手使用須知:4K 對齊調教實戰,提昇 SSD 效能。於是有了轟轟烈烈的「4K對齊」問題,將導致硬碟或SSD效能較差。
後來查完資料[4],發現對4K對齊的擔憂沒有意義,因為新版本的分割工具fdisk、gdisk已經放棄用磁軌的定義,自動將所有分區對到2048、1024 KiB磁區,使用上不必再去條一堆參數,保持預設就不會有4K對齊的問題。
如果你用$ sudo fdisk -h去查更多參數的用法,你能找到fdisk的3個參數如下:
-C <number> specify the number of cylinders(磁柱)-H <number> specify the number of heads(磁頭)
-S <number> specify the number of sectors (磁區) per track(磁軌)
很多年前,那個SSD剛出的年代,高手Jeffrey B. Layton 靠條-H和-S,達到分割區的4K對齊,詳細請看:Aligning SSD Partitions。不過,這已經是過去式,如今不需要再用這些參數了
如何驗證4K對齊[10, 11, 12, 13]
只要注意起始磁區可以被8整除即可。首先看你用MBR或GPT,決定你用fdisk或gdisk執行查詢,拿起計算機將First sector的數值除以8,可以整除代表4K對齊完成。如果你忘了怎麼查詢,馬上Ctrl+F搜尋本文:「fdisk查詢」或「gdisk查詢」,多多練習喔!
▼以gdisk為例
呼!為了心中的4K疑惑,爬了N篇文,整理成寫長篇大論,希望能做更清楚的描述,暫時告一段落,真的設定適一下就完成了。不過別忘記,Linux下還有掛載點(Raspbain會自動掛載到 /Media 目錄下)和給權限兩個重點要注意,可以回到本文的開頭目錄看看,沒給權限還是不能用,但算是相對簡單滴,當然你可以去看神人鳥哥,去天龍書局買本好書,大多Linux入門書都會講解,不然先問google大神呦~
參考資料
- Globally unique identifier, Wikipedia
- GUID磁碟分割表, Wikipedia
- 鳥哥的 Linux 私房菜:第七章、Linux 磁碟與檔案系統管理
- Advanced Format, Wikipedia
- 人生第一顆固態硬碟-Intel 530 240GB SATA3
- File system, Wikipedia
- SSD 新手使用須知:4K 對齊調教實戰,提昇 SSD 效能
- Difference between revisions of "Fdisk"
- Aligning SSD Partitions
- MAKE SURE 4K ALIGNMENT ON SSD(英文)
- Ubuntu 固态硬盘 4K 对齐及启用 Trim(中文)
- Linux下检查硬盘是否4K对齐
- 在U盘上安装 Arch Linux (2013-07)(4K問題和格式化)
沒有留言:
張貼留言