替 Linux 新增硬碟(磁碟分割、格式化與掛載)

最近要替我的 Linux Server 增加一顆硬碟,一般若是在安裝 Linux 時就將硬碟裝上去的話,就可以直接在安裝時設定好硬碟的格式化與掛載,但若是後來要加掛新的硬碟,就要自己動手設定了。

這裡示範在 Ubuntu Linux 下面新增加硬碟的做法,首先當然是買一顆新硬碟囉,現在的硬碟都漲價了,不過這顆剛好是還沒漲之前買的。


接著把新的硬碟裝上去(有抽取盒好方便啊!),

P2033359

接下來,就可以直接開機進入系統了。

由於 MBR 分割表不支援超過 2TB 的磁碟,如果您的硬碟大小超過 2TB,就無法使用 fdisk 分割硬碟,請改用 parted 以 GPT 的方式分割,教學請參考 Linux 的 Parted 指令教學

分割硬碟

新的硬碟應該是沒有任何分割的,所以要先用 fdisk 來分割硬碟,但是要分割新硬碟之前,要先搞清楚新的硬碟是哪一顆,弄錯可就慘了!先用 df 來看一下目前系統硬碟的使用情形:

df -h

這會顯示出目前硬碟的掛載狀況,輸出為

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             440G   46G  372G  12% /
none                  5.9G  260K  5.9G   1% /dev
none                  5.9G     0  5.9G   0% /dev/shm
none                  5.9G   64K  5.9G   1% /var/run
none                  5.9G     0  5.9G   0% /var/lock
none                  5.9G     0  5.9G   0% /lib/init/rw
/dev/sdb1             459G  198M  435G   1% /data1

而我門剛剛裝上去的新硬碟在這裡是看不到的,因為我們都還沒開始分割,接著在看看 /dev 下面所有的硬碟情況,

ls /dev/[sh]d*

輸出為

/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1  /dev/sdc

這樣一比較就知道新的硬碟是 /dev/sdc 這顆,再用 fdisk 確認一下:

fdisk -l /dev/sdc

輸出為

Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x40bab849
   Device Boot      Start         End      Blocks   Id  System

看起來沒問題,沒有任何磁碟分割表的資訊,接著開始分割,首先進入 fdisk

fdisk /dev/sdc

fdisk 是一個互動模式的分割工具,輸入 m 再按 Enter 可以顯示各種指令的說明:

WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
         switch off the mode (command ‘c’) and change display units to
         sectors (command ‘u’).
Command (m for help): m
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)
Command (m for help): 

首先我們要新增一個分割區,步驟如下
  1. 新增分割區,輸入 nEnter
  2. 選擇要建立 extended 還是 primary partition,因為我的硬碟全部只要一個分割區,所以我選 primary,輸入 pEnter
  3. 選擇 Partition number,primary 分割區最多可以有四個,隨便選都可以,不過建議選 1,免得以後看起來很奇怪,輸入 1Enter
  4. 輸入開始的 cylinder,用預設值就可以了,直接按 Enter
  5. 輸入結束的 cylinder,若是要用最大的容量,就直接按 Enter,若是要指定分割區的大小,就用 +size{K,M,G} 的形式指定,例如指定為 100G 的大小就輸入 +100G 再按 Enter
  6. 最後將分割表寫入硬碟,輸入 w 再按 Enter

以上整個過程看起來就像這樣:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-243201, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-243201, default 243201):
Using default value 243201
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

若是要離開 fdisk 就輸入 qEnter 就可以了。

接著再用 fdisk 確認分割區:

fdisk -l /dev/sdc

輸出為

Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x40bab849
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1      243201  1953512001   83  Linux

最下面一行就是新的分割資訊,看起來沒什麼問題了,接著就要來格式化硬碟。

格式化(Format)硬碟

現在新的 Linux 應該大都是用 Ext4 的檔案格式,若是較舊的 Linux 可能會用 Ext3,不過操作方法都大同小異。

Linux 下格式化就用 mkfs 這個指令就可以了:

mkfs -t ext4 /dev/sdc1

其中 -t 選項可以指定檔案系統,若是 Ext3 的話就指定為 -t ext3。等他跑完,硬碟的格式化就完成了,其輸出大約會像這樣:

mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122101760 inodes, 488378000 blocks
24418900 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Writing inode tables: done                          
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

接著就剩下掛載(mount)硬碟的工作了。

掛載(mount)硬碟

在 Linux 下面的磁碟掛載設定都是寫在 /etc/fstab 中,而傳統的寫法是使用 /dev/sda1 這樣的方式指定磁碟,但是若是當磁碟更換安裝的順序時,原本的 /dev/sda1 有可能就會變成 /dev/sdb1,有時候光是分清楚哪顆是哪顆就夠頭痛的了。

現在新的方式都是使用 UUID 來指定磁碟的,所以 /etc/fstab 看起來會像這樣:

proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=684530e1-df5c-48d7-b3e4-eb0d47054877 /               ext4    errors=remount-ro 0       1
UUID=35ddf35e-87de-4ab0-88d1-2a654d36b19a none            swap    sw              0       0
UUID=9746f325-1c82-4c04-b447-b5c596eea6c1 /data1          ext4    defaults        0       2

硬碟的 UUID 就像是它的身分證字號,每一顆硬碟都可不同的 UUID,使用 UUID 來指定磁碟就不會因為安裝的順序不同而產生變化,這樣做的好處是若是當磁碟常常要拔來拔去時,系統管理者不用再去更改 fstab 的設定,系統會自動尋找對應的 UUID 來掛載,很方便!

以 Ubuntu Linux 為例,基本上在安裝好系統時,/etc/fstab 中預設就是使用 UUID 來指定磁碟,但是若要自己增加一顆新的硬碟時,要如何來指定 UUID 呢?其實很簡單,就是利用 blkid 這個指令,它可以列出所有磁碟的 UUID:

sudo blkid

輸出為


/dev/sda1: UUID=”684530e1-df5c-48d7-b3e4-eb0d47054877″ TYPE=”ext4″
/dev/sda5: UUID=”35ddf35e-87de-4ab0-88d1-2a654d36b19a” TYPE=”swap”
/dev/sdb1: UUID=”9746f325-1c82-4c04-b447-b5c596eea6c1″ TYPE=”ext4″
/dev/sdc1: UUID=”146d3bb3-e351-45c8-ac84-42534ce51d29″ TYPE=”ext4″ 

所以現在就是依樣畫葫蘆,把新的硬碟資訊寫進 /etc/fstab 中,在 /etc/fstab 加入下面這行:


UUID=146d3bb3-e351-45c8-ac84-42534ce51d29 /data2          ext4    defaults        0       

這樣就大功告成了,下次重開機時,系統就會把新的硬碟掛載至 /data2,若要馬上測試掛載硬碟設定是否正確,可以使用 mount

mount /data2

再用 df -h 看一下,就知道有沒有問題了。

使用 UUID 掛載硬碟,只要設定一次,以後就不用煩惱掛載的問題了,真方便!

Linux

4 Comments

  1. Banyan

    Hi,
    我照您的方法外接了一顆3TB硬碟,但df看容量卻只有2TB,請問這是甚麼問題?謝謝!

  2. anonymouse

    請問可以先掛載在進行分割格式化嗎?

    • anonymouse

      是用virtual box另外新增一個40G進行了掛載

Leave a Reply