1. 程式人生 > 實用技巧 >100臺CentOS7要分割槽怎麼辦?

100臺CentOS7要分割槽怎麼辦?

背景

剛剛開通了 100 臺 CentOS7 伺服器,現在要批量分割槽怎麼辦?一臺臺的操作顯然不符合我摸魚的風格,既然每臺操作都一樣,Ansible Roles 就有用武之地了。

正常分割槽流程

  • fdisk -l 檢視有哪些磁碟
  • fdisk /dev/sdb 新建分割槽,儲存
  • mkfs.xfs /dev/sdb1 格式化為 xfs 格式
  • mkdir -p /data 新建目錄
  • mount /dev/sdb1 /data 掛載
  • 編輯 /etc/fstab ,伺服器重啟後自動掛載

可以看到這個過程是比較繁瑣的,光打字我都覺得累了。下面是詳細過程:

[root@wlj179 ~]# fdisk -l|grep 'Disk /dev/'
Disk /dev/sda: 479.0 GB, 478998953984 bytes, 935544832 sectors
Disk /dev/sdb: 1999.0 GB, 1998998994944 bytes, 3904294912 sectors
Disk /dev/mapper/centos-root: 107.4 GB, 107374182400 bytes, 209715200 sectors
Disk /dev/mapper/centos-swap: 17.2 GB, 17179869184 bytes, 33554432 sectors
[root@wlj179 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-3907029167, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-3907029167, default 3907029167): 
Using default value 3907029167
Partition 1 of type Linux and of size 1.8 TiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@wlj179 ~]# mkfs.xfs /dev/sdb1 
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=122094598 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=488378390, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=238466, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@wlj179 ~]# mkdir -p /data
[root@wlj179 ~]# mount /dev/sdb1 /data/
[root@wlj179 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Mar 26 04:55:31 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=0135710d-4dd6-4a55-98a3-9453637e441a /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1 /data  xfs     defaults        0 0

Ansible playbooks

通俗的說,把 playbooks 理解為一個 shell 指令碼就差不多了,一樣是執行以後實現某個功能。

簡單來說, playbooks 是一種簡單的配置管理系統與多機器部署系統的基礎.與現有的其他系統有不同之處,且非常適合於複雜應用的部署.

Playbooks 可用於宣告配置,更強大的地方在於,在 playbooks 中可以編排有序的執行過程,甚至於做到在多組機器間,來回有序的執行特別指定的步驟.並且可以同步或非同步的發起任務.

我們使用 adhoc 時,主要是使用 /usr/bin/ansible 程式執行任務.而使用 playbooks 時,更多是將之放入原始碼控制之中,用之推送你的配置或是用於確認你的遠端系統的配置是否符合配置規範.

批量分割槽

[root@iZ88n11npysZ fdisk]# more tasks/main.yaml 
---

- name: Create a new primary partition
  parted:
    device: /dev/sdb
    number: 1
    state: present

- name: Create a xfs filesystem on /dev/sdb
  filesystem:
    fstype: xfs
    dev: /dev/sdb1

- name: Create folder 
  shell: mkdir -p /data

- name: Mount up device by label
  mount:
    path: /data
    src: /dev/vdb1
    fstype: xfs
    state: mounted

執行

ansible-playbook main.yaml

親測 5s 完成一臺。