我們都知道要對磁盤進行分區,但是爲什麼要進行分區呢?當然有很多好處啦!接下來我們就說道說道: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屬於標準輸入)
fdisk -l 查看分區
如果只是這樣用lsblk查看設備時,分區表中並沒有新建的分區,
所以要通知內核重新讀取硬盤分區表
進行如下操作:
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
操作完成後直接寫入硬盤。
習題
查詢命令java來自於哪個rpm包
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
fi