磁盘分区

     我们都知道要对磁盘进行分区,但是为什么要进行分区呢?当然有很多好处啦!接下来我们就说道说道: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









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