У меня есть сценарий, который разбивает каталог на два равных раздела. Я разделяю /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
Что я сделал не так? Как это исправить сейчас? Похоже, я что-то напортачил.
Таблица разделов необходима для создания разделов на диске. В настоящее время вы используете файловую систему непосредственно на блочном устройстве. Вам нужно сначала поместить MBR или GPT на этот базовый «диск», прежде чем вы сможете разместить разделы на этой таблице. Ваш сценарий пытается сделать это, но sfdisk не работает с неверным вводом.
Входные данные вашего sfdisk находятся за пределами диапазона, а размер вашего первого раздела превышает терабайт на диске, который не превышает 300 гигабайт, и sfdisk будет праведно отказываться от этого.
Ниже приведен пример вывода работоспособного sfdisk:
# sfdisk -d /dev/sda
label: dos
label-id: 0x8b33f739
device: /dev/sda
unit: sectors
/dev/sda1 : start= 2048, size= 14704640, type=83
Это начинается с границы 2 КиБ и заканчивается примерно на 7 ГБ. Есть только один раздел. Значения в sfdisk являются секторами, поэтому вы должны быть уверены, что ваш диск использует размер сектора 512B или 4KiB. Вы можете настроить эти значения вручную по своему вкусу.