Tein taannoin erästä tarvetta varten joukon bash-scriptejä, joista löytyy nämä kaksi funktiota:
csv-disks(){
local dcols=name,hotplug,tran,rm,subsystems,rota,type,pttype,size,model
lsblk -de7 -pbo $dcols -lJ |
yq -o=csv '
[
# Filter out non-writable media
.blockdevices
| filter(.pttype) | filter(.type != "rom") # ODD
| filter((.tran == "usb" and .hotplug == false) | not) # live boot media
# Prioritize internal over external and SSD over HDD over flash memory
| with(.[];
with(select(.hotplug == false ); .priority += 10) # internal
| with(select(.hotplug == true ); .priority += 0) # external
| with(select(.tran == "nvme"); .priority += 1) # fast SSD
| with(select(.rota == false ); .priority += 1) # SSD
| with(select(.rm == false ); .priority += 1) # not flash
)
| sort_by(.priority, .size) # biggest with highest priority
| reverse # at top
# Repurpose selected details
| .[]
| (select(.pttype == "dos") | .pttype) = "mbr"
| (select(.hotplug == false and .rm == false and .rota == false)
| .class) = "kiinto-SSD"
| (select(.hotplug == false and .rm == false and .rota == true )
| .class) = "kiinto-HDD"
| (select(.hotplug == true and .rm == false) | .class) = "oheislevy"
| (select(.hotplug == true and .rm == true) | .class) = "oheismuisti"
# Tabulate selected details
| [.name, .size, (.pttype | upcase), (.tran | upcase), .class, .model ]
]
'
}
select-disk(){
local heads=Polku,Koko,Osiotaulu,Liitos,Tyyppi,Malli
local PS3=$(printf "\nValitse levy: ")
local IFS=$'\n'
echo
select line in $(csv-disks | column -ts , -N $heads -R Koko)
do
[ $REPLY -eq 1 ] && continue
disk=$(echo $line | cut -d' ' -f1)
break
done &&
printf "\033[1m\033[7m"disk=$disk"\033[0m\n" # bold reverse
}
Ensimmäinen vaatii (mikefarh-) yq:n; se laatii luettelon levyistä ja lisää luetteloon luokittelutietoa. Toinen esittää levyt valikkona, josta voi valita ja asettaa valitun levyn /dev-polun muuttujaan disk.
Vaikkei näitä funktioita tarvitsisikaan sellaisenaan, sieltä löytyy koodia lukemalla aika monta keinoa etsiä tietoa levyistä.