欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

自动格式化磁盘并挂载

程序员文章站 2022-05-13 18:25:56
1、背景介绍 工作当中经常会遇到需要对新来的服务器进行安装系统,在安装系统的时候需要对磁盘进行分区、格式化。往往服务器磁盘都是2块SSD+12块SATA硬盘,在对如此之多的磁盘进行分区和格式化,真是个体力活。甚至还有许多服务器的USB插口不够用,鼠标和键盘不能同时用,而且身边又没有一个USBhub, ......

  1、背景介绍

        工作当中经常会遇到需要对新来的服务器进行安装系统,在安装系统的时候需要对磁盘进行分区、格式化。往往服务器磁盘都是2块ssd+12块sata硬盘,在对如此之多的磁盘进行分区和格式化,真是个体力活。甚至还有许多服务器的usb插口不够用,鼠标和键盘不能同时用,而且身边又没有一个usbhub,其操作难度可想而知。于是就有了以下的故事。最初的想法是在安装操作系统的时候,只用对系统盘进行分区和格式化,剩余的磁盘待装完操作系统之后再在后台手动进行分区和格式化,再后来就想着写一个shell脚本进自动分区和格式化岂不是完美,说到做到,下面就开始尝试

  2、手动格式化和挂载

  1)、统计磁盘信息

    在后台执行lsblk -a命令既可以查看到所有的磁盘信息,下图中sda为系统盘,已经存在sda1和sda2两个分区,其他从sdb至sdi均未分区

    自动格式化磁盘并挂载

  2)、磁盘分区

    执行命令parted -s /dev/sdb mklabel gpt mkpart primary  ext4 0 100%对sdb磁盘进行分区,此处分区格式为gpt分区,容量为sdb磁盘的全部(这里只创建了一个分区),后面依次对sdc sdd等所有磁盘进行分区

    自动格式化磁盘并挂载

  3)、格式化分区

    执行命令mkfs.ext4 -f /dev/sdb1即对磁盘sdb的第一个分区进行格式化为ext4格式,后面依次对剩下的磁盘进行格式化

  4)、创建磁盘分区挂载目录

    我这里将所有的磁盘分区都挂载在/home目录下的sdb、sdc、sdd....,所有我们需要在/home目录下新建目录sdb、sdc、sdd....

    cd /home
    mkdir sdb sdc sdd ...

  5)、挂载分区

    首先通过blkid命令查看所有分区的uuid

    自动格式化磁盘并挂载

    然后编辑/etc/fstab文件,将sdb1至sdi1所有分区添加进去,如下图

    自动格式化磁盘并挂载

    最后重启系统即可  

 

  3、编写shell脚本自动化

    有了以上的实践,就想着写一个shell脚本能自动进行磁盘的分区和挂载,以下贴上代码

    

 1 #!/usr/bin/bash
 2 disk=`lsblk -a |grep disk|grep -v sda|awk '{print $1}'`
 3 
 4 function parteddisk
 5 {
 6     for disk in $disk
 7     do
 8         echo -e "\033[33m starting parted disk $disk \033[0m"
 9         parted -s /dev/${disk} mklabel gpt
10         parted -s /dev/${disk} mkpart primary ext4  0 100%
11     done
12     echo -e "\033[47;32m all disk parted done! \033[0m"
13     sleep 1s
14 }
15 
16 function formatpartition
17 {
18     for disk in $disk
19     do
20         echo -e "\033[33m starting format partition /dev/${disk}1 \033[0m"
21         mkfs.ext4 -f /dev/${disk}1
22         sleep 0.5s
23     done
24     echo -e "\033[47;32m all partition format done!!! \033[0m"
25     sleep 1s
26 }
27 
28 function makedir
29 {
30     echo -e "\033[33m starting make the mount diretory \033[0m"
31     for disk in $disk
32     do
33         mkdir /home/${disk}
34     done
35     echo -e "\033[31m the mount diretories are: \033[0m"
36     for disk in $disk
37     do
38         echo /home/${disk}
39     done
40     echo -e "\033[47;32m make mount diretories done!! \033[0m"
41     sleep 1s
42 }
43 
44 function mountdisk
45 {
46     for disk in $disk
47     do
48         uuid=`blkid /dev/${disk}1|awk '{print $2}'|awk -f "\"" '{print $2}'`
49         cat <<eof >>uuid.txt
50 uuid=$uuid /home/${disk}               ext4    defaults        1 2
51 eof
52     done
53     cat uuid.txt>>/etc/fstab
54     echo -e "\033[31m the file /etc/fstab is: \033[0m"
55     cat /etc/fstab
56     echo -e "\033[31m please comfirm it and reboot your system!!! \033[0m"
57 }
58 
59 formatdisk
60 parteddisk
61 makedir
62 mountdisk