在 shell 脚本中将磁盘分区为两个相等的分区

在 shell 脚本中将磁盘分区为两个相等的分区

我正在尝试将磁盘划分为两个相等的分区。到目前为止,我使用 fdisk 命令手动完成所有操作,然后使用两个分区的 UUID 修改 fstab 文件,我有大约 70 台机器可以执行此操作。有没有可以使用 shell 脚本自动完成此操作的方法?我不想在每个机器上手动完成所有操作。

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         30G  1.4G   27G   5% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev             60G   12K   60G   1% /dev
tmpfs            12G  384K   12G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none             60G     0   60G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/vdb        2.4T   72M  2.2T   1% /mnt

我想分区/dev/vdb成两个相等的分区/data01和/data02。使用一个 shell 脚本中的所有内容来执行此操作的最佳方法是什么?我拥有所有这些机器的 root 访问权限,并且我有 Ubuntu 14.04 盒子。

答案1

如果这纯粹是供 Linux 使用(似乎是因为这些是 KVM 中的虚拟磁盘),请使用左心室容量。 LVM 比本机分区更易于使用且更灵活,但代价是不被 Linux 以外的操作系统理解。这是您需要的要点,没有任何错误检查。创建物理卷正好跨越磁盘,创建卷组仅包含该物理卷,并且创建两个逻辑卷每个包含一半空间(我将最后一个卷的大小表示为仍然可用的空间,以免遇到舍入问题)。

pvcreate /dev/vdb
vgcreate mydisk /dev/vdb
lvcreate -n data01 -l 50%VG mydisk
lvcreate -n data02 -l 100%FREE mydisk
echo '/dev/mydisk/data01 /data01 auto defaults' >>/etc/fstab
echo '/dev/mydisk/data02 /data02 auto defaults' >>/etc/fstab

答案2

假设你的磁盘扇区大小是 512 字节,我认为这可以解决问题(你将需要 sfdisk)

#!/bin/bash
DISK=/dev/sdb
OFFSET=2048
SIZE=$(( ($(sfdisk -s $DISK) * 2 - $OFFSET) / 2 ))
POS_MAX_P1=$(( $SIZE + $OFFSET - 1 ))
POS_MIN_P2=$(( $POS_MAX_P1 + 1 ))
PART_TYPE=83     // Here you can change the type of the partitions

LAYOUT="2048,$POS_MAX_P1,$PART_TYPE\n$POS_MIN_P2,,$PART_TYPE"

echo -e $LAYOUT | sfdisk $DISK
partprobe $DISK
echo -e "/dev/sdb1\t/data01\tauto\t0 1\n/dev/sdb2\t/data02\tauto\t0 1\n" >> /etc/fstab

相关内容