forked from Bitmessage/sysdeploy
add: more partition related functions
- drive_list - partition_list - find_unused - find_oldest - find_newest - version_from_partnum
This commit is contained in:
parent
59fae65452
commit
586cccf0d4
65
drive.inc
65
drive.inc
|
@ -23,4 +23,69 @@ function rename_partition
|
||||||
parted -s "$drive" -- name "$partition" '"'"$new_label"'"'
|
parted -s "$drive" -- name "$partition" '"'"$new_label"'"'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function drive_list
|
||||||
|
{
|
||||||
|
drives="$(lsblk -nd -o NAME,TYPE \
|
||||||
|
/dev/nvme+([0-9])n+([0-9]) /dev/sd+([a-z]) | \
|
||||||
|
grep ' disk' |cut -d\ -f1)"
|
||||||
|
}
|
||||||
|
|
||||||
|
function partition_list
|
||||||
|
{
|
||||||
|
local drive="$1"
|
||||||
|
partitions="$(parted -m "$drive" -- print| \
|
||||||
|
awk --field-separator=":" \
|
||||||
|
'{if (NR > 2)
|
||||||
|
print $1
|
||||||
|
}')"
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_unused
|
||||||
|
{
|
||||||
|
local drive="$1"
|
||||||
|
unused="$(parted -m "$drive" -- print|awk --field-separator=":" \
|
||||||
|
'{if (NR > 2 && $1 >= 2 && $6 == "root unused") {
|
||||||
|
print $1
|
||||||
|
}}')|head -1"
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_oldest
|
||||||
|
{
|
||||||
|
local drive="$1"
|
||||||
|
oldest="$(parted -m "$drive" -- print|awk --field-separator=":" \
|
||||||
|
'BEGIN
|
||||||
|
{min="ZZZZ"}
|
||||||
|
{if (NR > 2 && $1 >= 2 && $1 <= 4 &&
|
||||||
|
$6 < min && $6 != "root unused") {
|
||||||
|
min=$6; part=$1
|
||||||
|
}}
|
||||||
|
END
|
||||||
|
{print part}')"
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_newest
|
||||||
|
{
|
||||||
|
local drive="$1"
|
||||||
|
newest="$(parted -m "$drive" -- print|awk --field-separator=":" \
|
||||||
|
'BEGIN
|
||||||
|
{max=""}
|
||||||
|
{if (NR > 2 && $1 >= 2 && $1 <= 4 &&
|
||||||
|
$6 > max && $6 != "root unused") {
|
||||||
|
max=$6; part=$1
|
||||||
|
}}
|
||||||
|
END
|
||||||
|
{print part}')"
|
||||||
|
}
|
||||||
|
|
||||||
|
function version_from_partnum
|
||||||
|
{
|
||||||
|
local drive="$1"
|
||||||
|
local partnum="$2"
|
||||||
|
version="$(parted -m "$drive" -- print|awk --field-separator=":" \
|
||||||
|
'{if (NR > 2 && $1 == "'"$partnum"') {
|
||||||
|
print $6
|
||||||
|
}}')"
|
||||||
|
version="$(echo "$version"|cut -d\ -f2)"
|
||||||
|
}
|
||||||
|
|
||||||
# vim: set ft=sh:
|
# vim: set ft=sh:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
BYT;
|
BYT;
|
||||||
T_E_M_P:17.2GB:file:512:512:gpt::;
|
T_E_M_P:17.2GB:file:512:512:gpt::;
|
||||||
1:1049kB:1074MB:1073MB::EFI system partition:boot, legacy_boot, esp;
|
1:1049kB:1074MB:1073MB::EFI system partition:boot, legacy_boot, esp;
|
||||||
2:1075MB:2147MB:1073MB::root renamed:;
|
2:1075MB:2147MB:1073MB::root 20210228:;
|
||||||
3:2149MB:3221MB:1073MB::root unused:;
|
3:2149MB:3221MB:1073MB::root unused:;
|
||||||
4:3222MB:4295MB:1073MB::root unused:;
|
4:3222MB:4295MB:1073MB::root unused:;
|
||||||
5:4296MB:17.2GB:12.9GB::Encrypted:;
|
5:4296MB:17.2GB:12.9GB::Encrypted:;
|
||||||
|
|
|
@ -3,16 +3,46 @@
|
||||||
function test_partitioning()
|
function test_partitioning()
|
||||||
{
|
{
|
||||||
local img
|
local img
|
||||||
|
local test_version=20210228
|
||||||
|
local min_version=20210101
|
||||||
|
local max_version=20211231
|
||||||
|
|
||||||
img=$(mktemp -u)
|
img=$(mktemp -u)
|
||||||
dd if=/dev/zero of="$img" bs=1M seek=16384 count=0 2> /dev/null
|
dd if=/dev/zero of="$img" bs=1M seek=16384 count=0 2> /dev/null
|
||||||
|
|
||||||
setup_drive "$img"
|
setup_drive "$img"
|
||||||
output=$(parted -ms "$img" -- print)
|
output=$(parted -ms "$img" -- print)
|
||||||
sed -i "s|T_E_M_P|$img|g;" tests/data/parted.dat
|
sed -i "s|T_E_M_P|$img|g;" tests/data/parted.dat
|
||||||
assertEquals "$(cat tests/data/parted.dat)" "$output"
|
assertEquals "$(cat tests/data/parted.dat)" "$output"
|
||||||
rename_partition "$img" 2 "root renamed"
|
|
||||||
|
rename_partition "$img" 2 "root $test_version"
|
||||||
output=$(parted -ms "$img" -- print)
|
output=$(parted -ms "$img" -- print)
|
||||||
sed -i "s|T_E_M_P|$img|g;" tests/data/rename.dat
|
sed -i "s|T_E_M_P|$img|g;" tests/data/rename.dat
|
||||||
assertEquals "$(cat tests/data/rename.dat)" "$output"
|
assertEquals "$(cat tests/data/rename.dat)" "$output"
|
||||||
|
|
||||||
|
version_from_partnum "$img" 2
|
||||||
|
assertEquals "$test_version" "$version"
|
||||||
|
|
||||||
|
version_from_partnum "$img" 3
|
||||||
|
assertEquals "$min_version" "$version"
|
||||||
|
|
||||||
|
version_from_partnum "$img" 4
|
||||||
|
assertEquals "$max_version" "$version"
|
||||||
|
|
||||||
|
find_unused "$img"
|
||||||
|
assertContains " 3 4 " "$unused"
|
||||||
|
|
||||||
|
rename_partition "$img" 3 "root $min_version"
|
||||||
|
find_oldest "$img"
|
||||||
|
assertEquals "$min_version" "$oldest"
|
||||||
|
|
||||||
|
rename_partition "$img" 4 "root $max_version"
|
||||||
|
find_newest "$img"
|
||||||
|
assertEquals "$max_version" "$newest"
|
||||||
|
|
||||||
|
partition-list "$img"
|
||||||
|
assertEquals "1 2 3 4 5" "$partitions"
|
||||||
|
|
||||||
rm -f "$img"
|
rm -f "$img"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user