我們都知道要對磁盤進行分區,但是為什麼要進行分區呢?當然有很多好處啦!接下來我們就說道說道:1.優化I/O性能
2.實作磁盤空間配額限制
3. 提高修複速度
4. 隔離系統和程式
5. 安裝多個OS
6. 采用不同檔案系統
有兩種分區方式:MBR和GPT
MBR:使用32位位表示扇區數 , 分區不超過2T, 4 個主分區;3 主分區+1 擴充(N 個邏輯分區)
GPT:支援128個分區,使用64 位 .使用128 位UUID 表示磁盤和分區。
fdisk和parted都可以對磁盤進行分區,但是兩者又有不同之處。
fdisk 建立MBR分區(disk類似于fdisk,但建立GPT分區)
p 分區清單
t 更改分區類型
n 建立新分區
d 删除分區
w 儲存并退出
q 不儲存并退出
fdisk /dev/sdX 進行分區(fdisk屬于标準輸入)
<a href="https://s1.51cto.com/wyfs02/M01/9E/DC/wKioL1mYC4nBRr9qAAB7divrpkQ049.png" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M00/9E/DD/wKioL1mYHBGCgIXKAADjDaqBbYg826.png" target="_blank"></a>
fdisk -l 檢視分區
如果隻是這樣用lsblk檢視裝置時,分區表中并沒有建立的分區,
<a href="https://s3.51cto.com/wyfs02/M01/00/2E/wKiom1mYKgLiAUKzAADTeVKmn2A658.png" target="_blank"></a>
是以要通知核心重新讀取硬碟分區表
進行如下操作:
<a href="https://s5.51cto.com/wyfs02/M02/00/2E/wKiom1mYKmaTaOtZAACSakuj9fw755.png" target="_blank"></a>
centos7:partprobe [/dev/DEVICE]
centos6: partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
删除分區用
partx -d --nr M-N /dev/DEVICE
注意:分完區一定要輸入w進行儲存,否則分區表中不會出現建立的區
parted進階分區操作,是一個可以分區并進行分區調整的工具,它可以建立,破壞,移動,複制,調整大小等等。建立GPT分區。
parted指令
parted /dev/sdX 對磁盤進行分區
mklabel msdos/gpt 建立卷标
help幫助
mkpart 建立分區
parted分為兩種模式:互動模式和指令行模式
互動模式類似于fdisk 文法:parted [option] device
指令模式:可以直接在指令行下對磁盤進行操作,比較适合程式設計操作 文法:parted [option] device command. 如下圖所示
parted /dev/sdX mkpart primary 1 1000
<a href="https://s1.51cto.com/wyfs02/M00/00/2E/wKiom1mYK0PypptqAABk-c9KRuw037.png" target="_blank"></a>
操作完成後直接寫入硬碟。
習題
查詢指令java來自于哪個rpm包
<a href="https://s3.51cto.com/wyfs02/M02/9E/DE/wKioL1mYM3PgubrZAADAF9yT_oU654.png" target="_blank"></a>
<a href="https://s3.51cto.com/wyfs02/M01/9E/DE/wKioL1mYMzvhTLZ2AAAo7t84mOA310.png" target="_blank"></a>
2.寫一個通過fdisk/parted自動分區的腳本,會對一個空硬碟/dev/sdb進行分區,增加一個大小為1G的主分區。
這道題如果不寫腳本的話還好做,但一寫腳本就挺麻煩的,要考慮的情況太多。小編确實考慮得沒别人全,借鑒一下别人的,不得不說考慮的太周全了,佩服佩服!
答案:
read -p "please input diskname (/dev/sd*):" disk; 靜默輸入要分區的硬碟
( [[ "$disk" =~ ^/dev/sd. ]] && fdisk -l $disk &> /dev/null)||exit 1 判斷輸入的磁盤名是否符合
type=`fdisk -l $disk |grep "Disk label type"` 取出磁盤的分區類型,指派給變量
a=`ls ${disk}?|wc -l` 取出分區數
b=`fdisk -l /dev/sdb|tail -n $a` 列出所有的分區
if echo "$type"|grep "\<gpt\>";then
echo -e"n\np\n1\n\n+1G\nw\n"|gdisk $disk
else
if echo "$b"|grep "\<Extended\>" &> /dev/null;then
if echo "$b"|head -3|grep "\<Extended\>" ;then 判斷主分區是否少于3個,列出前三行資訊,有extend則說明主分區少于三個,建一個預設的主分區
echo -e"n\n\n\n\nw\n"|fdisk $disk
else
echo -e "n\n\n+1G\nw\n"|fdisk $disk 主分區是3個的話建立一個邏輯分區
fi
else
if [ "$a" -lt 3 ];then 判斷主分區是否少于3個,是的話建一個1G的主分區
echo -e "n\np\n1\n\n+1G\nw\n"|fdisk $disk
elif [ "$a" -eq 3 ];then 主分區是3個,建一個擴充分區,在擴充分區下建一個邏輯分區
echo -e "n\ne\n\n\nw\n"|fdisk $disk
echo -e "n\n\n+1G\nw\n"|fdisk $disk
fi
fi
fi
3.要求輸入挂載點,将顯示其UUID
答案:dir=/app; egrep "[[:blank:]]+$dir[[:blank:]]+" /etc/fstab |cut -d" " -f1
這道題中用到了變量,用變量的話通用性比較好。
不用fstab:
read -p "please input Mounted on name:" Name1 輸入挂載點
if df $Name1 &>/dev/null ; then
Name2=`df "$Name1" |tail -1 |grep -o "^/[^ ]*"`
blkid $Name2 |grep -o '\<UUID="[[:alnum:]|-]*"'
unset Name1 Name2
else
echo "error,Mounted on name unknown";exit 1
本文轉自 honeyorange 51CTO部落格,原文連結:http://blog.51cto.com/13172732/1957836