最近要替我的 Linux Server 增加一顆硬碟,一般若是在安裝 Linux 時就將硬碟裝上去的話,就可以直接在安裝時設定好硬碟的格式化與掛載,但若是後來要加掛新的硬碟,就要自己動手設定了。
這裡示範在 Ubuntu Linux 下面新增加硬碟的做法,首先當然是買一顆新硬碟囉,現在的硬碟都漲價了,不過這顆剛好是還沒漲之前買的。
接著把新的硬碟裝上去(有抽取盒好方便啊!),
接下來,就可以直接開機進入系統了。
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):
- 新增分割區,輸入
n
按Enter
。 - 選擇要建立 extended 還是 primary partition,因為我的硬碟全部只要一個分割區,所以我選 primary,輸入
p
按Enter
。 - 選擇 Partition number,primary 分割區最多可以有四個,隨便選都可以,不過建議選 1,免得以後看起來很奇怪,輸入
1
按Enter
。 - 輸入開始的 cylinder,用預設值就可以了,直接按
Enter
。 - 輸入結束的 cylinder,若是要用最大的容量,就直接按
Enter
,若是要指定分割區的大小,就用+size{K,M,G}
的形式指定,例如指定為 100G 的大小就輸入+100G
再按Enter
。 - 最後將分割表寫入硬碟,輸入
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
就輸入 q
按 Enter
就可以了。
接著再用 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″
UUID=146d3bb3-e351-45c8-ac84-42534ce51d29 /data2 ext4 defaults 0
這樣就大功告成了,下次重開機時,系統就會把新的硬碟掛載至 /data2,若要馬上測試掛載硬碟設定是否正確,可以使用 mount
:
mount /data2
再用 df -h
看一下,就知道有沒有問題了。
使用 UUID 掛載硬碟,只要設定一次,以後就不用煩惱掛載的問題了,真方便!
Banyan
Hi,
我照您的方法外接了一顆3TB硬碟,但df看容量卻只有2TB,請問這是甚麼問題?謝謝!
G. T. Wang
MBR 無法支援超過 2TB 以上的硬碟,請改用 parted 以 GPT 分割磁碟。教學可參考 Linux 的 Parted 指令教學:建立、變更與修復磁碟分割區,或是使用圖形化介面的 gparted 工具。
anonymouse
請問可以先掛載在進行分割格式化嗎?
anonymouse
是用virtual box另外新增一個40G進行了掛載
kkkk
你好, 請問在使用fdisk expand partition時, 是否一定要delete partition呢? 如果真的delete partition, 那資料是否會全部俾delete呢? 謝謝
Aliya Chou
SAS 硬碟也可以比照? SUSE 15SP2也可以用這種方式?
Mark
Hello , 想請教一下, 我新增一隻硬盤,但是不能掛載 /backup , 出現 Error mounting filesystem. 求指教.
老無
謝謝 很實用的文章