Removed need for internally stored id->device map
This commit is contained in:
parent
048b39ffe0
commit
b1c4d9d40e
|
@ -138,7 +138,7 @@ disk_create_gpt() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local ptuuid="${DISK_ID_TO_UUID[$new_id]}"
|
local ptuuid="${DISK_ID_TO_UUID[$new_id]}"
|
||||||
create_resolve_entry "$new_id" ptuuid "$ptuuid" "$device"
|
create_resolve_entry "$new_id" ptuuid "$ptuuid"
|
||||||
|
|
||||||
einfo "Creating new gpt partition table ($new_id) on $device_desc"
|
einfo "Creating new gpt partition table ($new_id) on $device_desc"
|
||||||
sgdisk -Z -U "$ptuuid" "$device" >/dev/null \
|
sgdisk -Z -U "$ptuuid" "$device" >/dev/null \
|
||||||
|
@ -215,7 +215,7 @@ disk_create_raid() {
|
||||||
|
|
||||||
local mddevice="/dev/md/$name"
|
local mddevice="/dev/md/$name"
|
||||||
local uuid="${DISK_ID_TO_UUID[$new_id]}"
|
local uuid="${DISK_ID_TO_UUID[$new_id]}"
|
||||||
create_resolve_entry "$new_id" mdadm "$uuid" "$mddevice"
|
create_resolve_entry "$new_id" mdadm "$uuid"
|
||||||
|
|
||||||
einfo "Creating raid$level ($new_id) on $devices_desc"
|
einfo "Creating raid$level ($new_id) on $devices_desc"
|
||||||
mdadm \
|
mdadm \
|
||||||
|
@ -451,7 +451,6 @@ apply_disk_configuration() {
|
||||||
# Clean old resolved ids
|
# Clean old resolved ids
|
||||||
rm -rf "$RESOLVABLE_MAP_DIR" &>/dev/null
|
rm -rf "$RESOLVABLE_MAP_DIR" &>/dev/null
|
||||||
unset DISK_ID_TO_RESOLVABLE; declare -A -g DISK_ID_TO_RESOLVABLE
|
unset DISK_ID_TO_RESOLVABLE; declare -A -g DISK_ID_TO_RESOLVABLE
|
||||||
unset DISK_UUID_TO_DEVICE; declare -A -g DISK_UUID_TO_DEVICE
|
|
||||||
|
|
||||||
summarize_disk_actions
|
summarize_disk_actions
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,6 @@ USED_LUKS=false
|
||||||
DISK_ACTIONS=()
|
DISK_ACTIONS=()
|
||||||
# An associative array from disk id to a resolvable string
|
# An associative array from disk id to a resolvable string
|
||||||
declare -A DISK_ID_TO_RESOLVABLE
|
declare -A DISK_ID_TO_RESOLVABLE
|
||||||
# An associative from uuid to device
|
|
||||||
declare -A DISK_UUID_TO_DEVICE
|
|
||||||
# An associative array from disk id to parent gpt disk id (only for partitions)
|
# An associative array from disk id to parent gpt disk id (only for partitions)
|
||||||
declare -A DISK_ID_PART_TO_GPT_ID
|
declare -A DISK_ID_PART_TO_GPT_ID
|
||||||
# An associative array to check for existing ids (maps to uuids)
|
# An associative array to check for existing ids (maps to uuids)
|
||||||
|
|
|
@ -138,11 +138,32 @@ get_device_by_uuid() {
|
||||||
get_device_by_blkid_field 'UUID' "$1"
|
get_device_by_blkid_field 'UUID' "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_device_by_stored_uuid() {
|
get_device_by_ptuuid() {
|
||||||
local key="${1,,}"
|
local ptuuid="${1,,}"
|
||||||
[[ -v "DISK_UUID_TO_DEVICE[$key]" ]] \
|
local dev
|
||||||
|| die "Could not resolve uuid $key to device (not stored)"
|
dev="$(lsblk --all --path --pairs --output NAME,PTUUID,PARTUUID)" \
|
||||||
echo -n "${DISK_UUID_TO_DEVICE[$key]}"
|
|| die "Error while executing lsblk to find PTUUID=$ptuuid"
|
||||||
|
dev="$(grep "ptuuid=\"$ptuuid\" partuuid=\"\"" <<< "${dev,,}")" \
|
||||||
|
|| die "Could not find PTUUID=... in lsblk output"
|
||||||
|
dev="${dev%' ptuuid='*}"
|
||||||
|
dev="${dev#'name="'}"
|
||||||
|
echo -n "$dev"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_device_by_mdadm_uuid() {
|
||||||
|
local mduuid="${1,,}"
|
||||||
|
mduuid="${mduuid//-/}"
|
||||||
|
mduuid="${mduuid:0:8}:${mduuid:8:8}:${mduuid:16:8}:${mduuid:24:8}"
|
||||||
|
local dev
|
||||||
|
dev="$(mdadm --examine --scan)" \
|
||||||
|
|| die "Error while executing mdadm to find array with UUID=$mduuid"
|
||||||
|
dev="$(grep "uuid=$mduuid" <<< "${dev,,}")" \
|
||||||
|
|| die "Could not find UUID=... in mdadm output"
|
||||||
|
dev="${dev%'metadata='*}"
|
||||||
|
dev="${dev#'array'}"
|
||||||
|
dev="${dev#"${dev%%[![:space:]]*}"}"
|
||||||
|
dev="${dev%"${dev##*[![:space:]]}"}"
|
||||||
|
echo -n "$dev"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_device_by_luks_uuid() {
|
get_device_by_luks_uuid() {
|
||||||
|
@ -176,19 +197,6 @@ create_resolve_entry() {
|
||||||
local id="$1"
|
local id="$1"
|
||||||
local type="$2"
|
local type="$2"
|
||||||
local arg="${3,,}"
|
local arg="${3,,}"
|
||||||
local device="$4" # optional
|
|
||||||
|
|
||||||
case "$type" in
|
|
||||||
'partuuid') ;;
|
|
||||||
'uuid') ;;
|
|
||||||
'luks') ;;
|
|
||||||
'ptuuid') ;& # fallthrough
|
|
||||||
'mdadm')
|
|
||||||
DISK_UUID_TO_DEVICE[$arg]="$device"
|
|
||||||
save_map_entry DISK_UUID_TO_DEVICE "$arg" "$device"
|
|
||||||
;;
|
|
||||||
*) die "Cannot add resolvable entry for '$type:$arg' (unknown type)"
|
|
||||||
esac
|
|
||||||
|
|
||||||
DISK_ID_TO_RESOLVABLE[$id]="$type:$arg"
|
DISK_ID_TO_RESOLVABLE[$id]="$type:$arg"
|
||||||
save_map_entry DISK_ID_TO_RESOLVABLE "$id" "$type:$arg"
|
save_map_entry DISK_ID_TO_RESOLVABLE "$id" "$type:$arg"
|
||||||
|
@ -201,9 +209,6 @@ load_resolvable_entries() {
|
||||||
lambda() {
|
lambda() {
|
||||||
DISK_ID_TO_RESOLVABLE[$1]="$2"
|
DISK_ID_TO_RESOLVABLE[$1]="$2"
|
||||||
}; load_map_entries DISK_ID_TO_RESOLVABLE lambda
|
}; load_map_entries DISK_ID_TO_RESOLVABLE lambda
|
||||||
lambda() {
|
|
||||||
DISK_UUID_TO_DEVICE[$1]="$2"
|
|
||||||
}; load_map_entries DISK_UUID_TO_DEVICE lambda
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve_device_by_id() {
|
resolve_device_by_id() {
|
||||||
|
@ -215,11 +220,11 @@ resolve_device_by_id() {
|
||||||
local arg="${DISK_ID_TO_RESOLVABLE[$id]#*:}"
|
local arg="${DISK_ID_TO_RESOLVABLE[$id]#*:}"
|
||||||
|
|
||||||
case "$type" in
|
case "$type" in
|
||||||
'partuuid') get_device_by_partuuid "$arg" ;;
|
'partuuid') get_device_by_partuuid "$arg" ;;
|
||||||
'ptuuid') get_device_by_stored_uuid "$arg" ;;
|
'ptuuid') get_device_by_ptuuid "$arg" ;;
|
||||||
'uuid') get_device_by_uuid "$arg" ;;
|
'uuid') get_device_by_uuid "$arg" ;;
|
||||||
'mdadm') get_device_by_stored_uuid "$arg" ;;
|
'mdadm') get_device_by_mdadm_uuid "$arg" ;;
|
||||||
'luks') get_device_by_luks_uuid "$arg" ;;
|
'luks') get_device_by_luks_uuid "$arg" ;;
|
||||||
*) die "Cannot resolve '$type:$arg' to device (unknown type)"
|
*) die "Cannot resolve '$type:$arg' to device (unknown type)"
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue