我有一个脚本,可以将目录划分为两个相等的分区。我将/mnt
目录划分为两个相等的分区/data01
,然后/data02
。
david@machine:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda 30G 1.2G 27G 5% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 26G 12K 26G 1% /dev
tmpfs 5.2G 372K 5.2G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 26G 0 26G 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/vdb 276G 63M 262G 1% /mnt
以下是我的脚本:
#!/bin/bash -x
#
#
# Comment the mnt from fstab
umount /mnt
sed -i '{
s#^/dev/vdb#\#/dev/vdb#
}' /etc/fstab
echo '# partition table of /dev/vdb
unit: sectors
/dev/vdb1 : start= 2048, size=2147481600, Id=83
/dev/vdb2 : start=2147483648, size=2147483647, Id=83
/dev/vdb3 : start= 0, size= 0, Id= 0
/dev/vdb4 : start= 0, size= 0, Id= 0
' | sfdisk /dev/vdb
# Create the links since it over 2TB disk
partprobe
# make file system
mkfs -t ext4 /dev/vdb1
mkfs -t ext4 /dev/vdb2
# mkdir dst dirs
mkdir /data01 /data02
D1=`blkid /dev/vdb1 | awk '{print $2}'`
D2=`blkid /dev/vdb2 | awk '{print $2}'`
echo "$D1 /data01 ext4 rw,noatime,nodiratime 0 2" >> /etc/fstab
echo "$D2 /data02 ext4 rw,noatime,nodiratime 0 2" >> /etc/fstab
mount /data01
mount /data02
当我运行上述脚本时,它成功卸载了/mnt
目录,但随后失败并显示此错误消息。同样的脚本在我的另一台机器上运行良好,因此看起来这个盒子里有些不同,我没有在脚本中考虑到这一点,因此它失败了。
以下是完整的调试消息:
+ umount /mnt
+ sed -i '{
s#^/dev/vdb#\#/dev/vdb#
}' /etc/fstab
+ echo '# partition table of /dev/vdb
unit: sectors
/dev/vdb1 : start= 2048, size=2147481600, Id=83
/dev/vdb2 : start=2147483648, size=2147483647, Id=83
/dev/vdb3 : start= 0, size= 0, Id= 0
/dev/vdb4 : start= 0, size= 0, Id= 0
+ sfdisk /dev/vdb
'
Checking that no-one is using this disk right now ...
OK
Disk /dev/vdb: 582542 cylinders, 16 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/vdb: unrecognized partition table type
Old situation:
No partitions found
Warning: given size (2147481600) exceeds max allowable size (587200512)
sfdisk: bad input
+ partprobe
+ mkfs -t ext4 /dev/vdb1
mke2fs 1.42.9 (4-Feb-2014)
Could not stat /dev/vdb1 --- No such file or directory
The device apparently does not exist; did you specify it correctly?
+ mkfs -t ext4 /dev/vdb2
mke2fs 1.42.9 (4-Feb-2014)
Could not stat /dev/vdb2 --- No such file or directory
The device apparently does not exist; did you specify it correctly?
+ mkdir /data01 /data02
++ blkid /dev/vdb1
++ awk '{print $2}'
+ D1=
++ blkid /dev/vdb2
++ awk '{print $2}'
+ D2=
+ echo ' /data01 ext4 rw,noatime,nodiratime 0 2'
+ echo ' /data02 ext4 rw,noatime,nodiratime 0 2'
+ mount /data01
mount: mount point ext4 does not exist
+ mount /data02
mount: mount point ext4 does not exist
我做错了什么?现在该如何解决?看起来我搞砸了某件事。
答案1
您需要一个分区表才能在磁盘上创建分区。目前,您正在直接在块设备上使用文件系统。您需要先将 MBR 或 GPT 放到这个基本“磁盘”上,然后才能在该表上放置分区。您的脚本尝试执行此操作,但 sfdisk 因输入无效而失败。
您的 sfdisk 输入超出范围,并且您的第一个分区的大小超过 1TB,而磁盘不超过 300GB,sfdisk 将会对此做出拒绝。
以下是健康 sfdisk 输出的示例:
# sfdisk -d /dev/sda
label: dos
label-id: 0x8b33f739
device: /dev/sda
unit: sectors
/dev/sda1 : start= 2048, size= 14704640, type=83
这从 2KiB 边界开始,到大约 7GiB 结束。只有一个分区。sfdisk 中的值是扇区,因此您需要确定您的磁盘使用的是 512B 还是 4KiB 扇区大小。您可以根据自己的喜好手动调整这些值。