It's not enough to ignore the *data* LVs - .drbdctrl can race, too.
drbd .drbdctrl/0 drbd0: open("/dev/drbdpool/.drbdctrl") failed with -16 drbd .drbdctrl: State change failed: Need access to UpToDate data Change-Id: Id9657ee9b4434224a4813f678d09c9b948566aaa
This commit is contained in:
parent
b30f64534f
commit
44abfe83c0
@ -92,7 +92,7 @@ function _drbd_make_vg {
|
|||||||
sudo losetup "${vg_dev}" "${FILES}/${vg_name}"
|
sudo losetup "${vg_dev}" "${FILES}/${vg_name}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local lvm_cfg="devices { global_filter=[ 'a|$vg_lo_dev|' ] }"
|
local lvm_cfg="devices { global_filter=[ 'a|${vg_lo_dev}|' ] }"
|
||||||
|
|
||||||
# # if the lvm.conf already accepts the loop device, don't insert it again
|
# # if the lvm.conf already accepts the loop device, don't insert it again
|
||||||
# if ! sudo grep -q "${vg_lo_dev}" /etc/lvm/lvm.conf ; then
|
# if ! sudo grep -q "${vg_lo_dev}" /etc/lvm/lvm.conf ; then
|
||||||
@ -101,10 +101,10 @@ function _drbd_make_vg {
|
|||||||
|
|
||||||
# if theres already a pv signature, don't try to recreate
|
# if theres already a pv signature, don't try to recreate
|
||||||
if ! sudo pvdisplay | grep -q "${vg_lo_dev}" ; then
|
if ! sudo pvdisplay | grep -q "${vg_lo_dev}" ; then
|
||||||
sudo pvscan --config "$lvm_cfg"
|
sudo pvscan --config "${lvm_cfg}"
|
||||||
|
|
||||||
if sudo pvdisplay | grep -q "${vg_lo_dev}" ; then
|
if sudo pvdisplay | grep -q "${vg_lo_dev}" ; then
|
||||||
sudo pvcreate --config "$lvm_cfg" "${vg_dev}"
|
sudo pvcreate --config "${lvm_cfg}" "${vg_dev}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -112,11 +112,21 @@ function _drbd_make_vg {
|
|||||||
if ! sudo vgdisplay | grep -q "${vg_name}" ; then
|
if ! sudo vgdisplay | grep -q "${vg_name}" ; then
|
||||||
sudo vgscan
|
sudo vgscan
|
||||||
if ! sudo vgdisplay | grep -q "${vg_name}" ; then
|
if ! sudo vgdisplay | grep -q "${vg_name}" ; then
|
||||||
sudo vgcreate --config "$lvm_cfg" "${vg_name}" "${vg_dev}"
|
sudo vgcreate --config "${lvm_cfg}" "${vg_name}" "${vg_dev}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _modify_udev_file {
|
||||||
|
file="$1"
|
||||||
|
search="$2"
|
||||||
|
sed_cmd="$3"
|
||||||
|
|
||||||
|
if ! grep "${search}" "/lib/udev/rules.d/${file}" ; then
|
||||||
|
sudo sed -i "${sed_cmd}" "/lib/udev/rules.d/${file}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function configure_drbd_devstack {
|
function configure_drbd_devstack {
|
||||||
# Configure the service.
|
# Configure the service.
|
||||||
# This gets called before starting the c-vol service; the next callback,
|
# This gets called before starting the c-vol service; the next callback,
|
||||||
@ -144,20 +154,20 @@ function configure_drbd_devstack {
|
|||||||
# This will result in a message like
|
# This will result in a message like
|
||||||
# kernel: [...] drbd CV_...: drbdX: open("/dev/...") failed with -16
|
# kernel: [...] drbd CV_...: drbdX: open("/dev/...") failed with -16
|
||||||
# which means EBUSY
|
# which means EBUSY
|
||||||
if ! grep 'ENV{DM_NAME}=="'"${DRBD_DATA_VG}"'-CV_' /lib/udev/rules.d/60-persistent-storage-dm.rules ; then
|
_modify_udev_file 60-persistent-storage-dm.rules \
|
||||||
# Look for the DM_SUSPENDED line, and put another one behind it.
|
'ENV{DM_NAME}=="'"${DRBD_DATA_VG}"'-CV_' \
|
||||||
# ENV{DM_SUSPENDED}=="1", GOTO="persistent_storage_dm_end"
|
's:DM_SUSPENDED.*=="1",.*GOTO="\(.*\)":&\nENV{DM_NAME}=="'"${DRBD_DATA_VG}"'-CV_*", GOTO="\1"\n:'
|
||||||
# The label might have a different name (eg. on newer Debian),
|
_modify_udev_file 80-btrfs-lvm.rules \
|
||||||
# so let's look for it while we're at it.
|
'ENV{DM_NAME}=="'"${DRBD_DATA_VG}"'-CV_' \
|
||||||
sudo sed -i 's:DM_SUSPENDED.*=="1",.*GOTO="\(.*\)":&\nENV{DM_NAME}=="'"${DRBD_DATA_VG}"'-CV_*", GOTO="\1"\n:' /lib/udev/rules.d/60-persistent-storage-dm.rules
|
's:SUBSYSTEM.="block",.*GOTO="\(.*\)":&\nENV{DM_NAME}=="'"${DRBD_DATA_VG}"'-CV_*", GOTO="\1"\n:'
|
||||||
fi
|
|
||||||
|
|
||||||
if ! grep 'ENV{DM_NAME}=="'"${DRBD_DATA_VG}"'-CV_' /lib/udev/rules.d/80-btrfs-lvm.rules ; then
|
|
||||||
# The btrfs scan isn't wanted, too.
|
|
||||||
# SUBSYSTEM!="block", GOTO="btrfs_lvm_end"
|
|
||||||
sudo sed -i 's:SUBSYSTEM.="block",.*GOTO="\(.*\)":&\nENV{DM_NAME}=="'"${DRBD_DATA_VG}"'-CV_*", GOTO="\1"\n:' /lib/udev/rules.d/80-btrfs-lvm.rules
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
# The same can happen to the DRBDmanage control volume, too, of course!
|
||||||
|
_modify_udev_file 60-persistent-storage-dm.rules \
|
||||||
|
'ENV{DM_NAME}=="'"${DRBD_DRBDCTRL_VG}"'-.drbdctrl' \
|
||||||
|
's:DM_SUSPENDED.*=="1",.*GOTO="\(.*\)":&\nENV{DM_NAME}=="'"${DRBD_DRBDCTRL_VG}"'-.drbdctrl", GOTO="\1"\n:'
|
||||||
|
_modify_udev_file 80-btrfs-lvm.rules \
|
||||||
|
'ENV{DM_NAME}=="'"${DRBD_DRBDCTRL_VG}"'-.drbdctrl' \
|
||||||
|
's:SUBSYSTEM.="block",.*GOTO="\(.*\)":&\nENV{DM_NAME}=="'"${DRBD_DRBDCTRL_VG}"'-.drbdctrl", GOTO="\1"\n:'
|
||||||
|
|
||||||
# initialize drbdmanage
|
# initialize drbdmanage
|
||||||
sudo drbdmanage init --quiet
|
sudo drbdmanage init --quiet
|
||||||
|
Loading…
x
Reference in New Issue
Block a user