磁盤分區

     我們都知道要對磁盤進行分區,但是爲什麼要進行分區呢?當然有很多好處啦!接下來我們就說道說道: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屬於標準輸入)

wKioL1mYC4nBRr9qAAB7divrpkQ049.png


wKioL1mYHBGCgIXKAADjDaqBbYg826.png

wKioL1mYJuaj8iHIAAAwls1ndpI857.png

fdisk -l  查看分區

如果只是這樣用lsblk查看設備時,分區表中並沒有新建的分區,

wKiom1mYKgLiAUKzAADTeVKmn2A658.png

所以要通知內核重新讀取硬盤分區表

進行如下操作:

wKiom1mYKmaTaOtZAACSakuj9fw755.png

                    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

wKiom1mYK0PypptqAABk-c9KRuw037.png

操作完成後直接寫入硬盤。


習題

  1. 查詢命令java來自於哪個rpm包

wKioL1mYM3PgubrZAADAF9yT_oU654.png

wKioL1mYMzvhTLZ2AAAo7t84mOA310.png

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









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章