#compdef mdadm
typeset -A opt_args
local -a args misc modes
_raids_build () {
_values -S \ "MD device type" \
'linear[linear]' \
{0,raid0,stripe}'[striping]' \
{1,raid1,mirror}'[mirroring]' \
{multipath,mp}'[multiple paths to one common physical storage device]' \
'faulty[injects faults]'
}
_raids () {
_values -S \ "MD device type" \
'linear[linear]' \
{0,raid0,stripe}'[striping]' \
{1,raid1,mirror}'[mirroring]' \
{4,raid4}'[RAID 4]' \
{5,raid5}'[RAID 5]' \
{6,raid6}'[RAID 6]' \
{10,raid10}'[RAID 1+0]' \
{multipath,mp}'[multiple paths to one common physical storage device]' \
'faulty[injects faults]'
}
_layouts () {
case ${(v)opt_args[(I)-(l|-level)]} in
5|raid5)
_values -S \ "RAID5 parity block layout" \
{left-asymmetric,la}'[left-asymmetric]' \
{left-symmetric,ls}'[left-symmetric]' \
{right-asymmetric,ra}'[right-asymmetric]' \
{right-symmetric,rs}'[right-symmetric]'
;;
10|raid10)
_values -s ' ' 'RAID10 layout with number of copies of each datablock' \
'n1[near copies]' \
'n2[near copies]' \
'n3[near copies]' \
'n4[near copies]' \
'n5[near copies]' \
'n6[near copies]' \
'n7[near copies]' \
'n8[near copies]' \
'n8[near copies]' \
'f1[far copies]' \
'f2[far copies]' \
'f3[far copies]' \
'f4[far copies]' \
'f5[far copies]' \
'f6[far copies]' \
'f7[far copies]' \
'f8[far copies]' \
'f9[far copies]'
;;
faulty)
_values -S \ "Failure mode" \
{write-transient,wt}'[write-transient]' \
{read-transient,rt}'[read-transient]' \
{write-presistent,wp}'[write-presistent]' \
{read-presistent,rp}'[read-presistent]' \
write-all'[write-all]' \
{read-fixable,rf}'[read-fixable]' \
{clear,none}'[remove any pending or periodic failure modes]' \
flush'[clear any persistant faults]'
esac
}
if (( $+words[(r)-(A|-assemble)] )); then
args=(
'(--bitmap)'--bitmap='[bitmap file to use with the array]::bitmap file:_files'
'(--uuid -u)'{--uuid=,-u}'[UUID of array to assemble]:UUID'
'(--super-minor -m)'{--super-minor=,-m}'[minor number to look for in super-block]:minor number'
'(--name -N)'{--name=,-N}'[array name to look for in super-block]:array name'
'(--config -c)'{--config=,-c}'[config file]::config file:_files'
'(--scan -s)'{--scan,-s}'[scan config file for missing information]'
'(--run -R)'{--run,-R}'[try to start the array even if not enough devices for a full array are present]'
'(--force -f)'{--force,-f}'[assemble the array even if some superblocks appear out-of-date]'
'(--update,-U)'{--update=,-U}'[update superblock]::update the superblock:(sparc2.2 summaries uuid resync byteorder super-minor)'
)
fi
if (( $+words[(r)-(B|-build)] )); then
args=(
'(--bitmap)'--bitmap='[file to store/find bitmap information in]::bitmap file:_files'
'(--chunk -c)'{--chunk=,-c}'[chunk size of kibibytes]:chunk size'
'(--rounding)'--rounding='[rounding factor for linear array (==chunk size)]:rounding factor'
'(--level -l)'{--level=,-l}'[RAID level]::RAID level:_raids_build'
'(--raid-devices -n)'{--raid-devices=,-n}'[number of active devices in array]:active devices number'
'(--bitmap-chunk)'--bitmap-chunk='[bitmap chunksize in Kilobytes]:bitmap chunk'
'(--delay -d)'{--delay=,-d}'[bitmap update delay in seconds]:bitmap update delay'
)
fi
if (( $+words[(r)-(C|-create)] )); then
args=(
'(--bitmap)'--bitmap='[create a bitmap for the array with the given filename]::bitmap file:_files'
'(--chunk -c)'{--chunk=,-c}'[chunk size of kibibytes]:chunk size'
'(--rounding)'--rounding='[rounding factor for linear array (==chunk size)]:rounding factor'
'(--level -l)'{--level=,-l}'[RAID level]::RAID level:_raids'
'(--parity -p --layout)'{--parity=,-p,--layout=}'[RAID5/6/10 parity algorithm, faulty mode]::layout:_layouts'
'(--raid-devices -n)'{--raid-devices=,-n}'[number of active devices in array]:active devices number'
'(--spare-devices -x)'{--spare-devices=,-x}'[number of spares (eXtras) devices in initial array]:spare devices number'
'(--size -z)'{--size=,-z}'[size (in K) of each drive in RAID1/4/5/6/10]:size of each drive'
'(--force -f)'{--force,-f}'[honour devices as listed on command line]'
'(--run -R)'{--run,-R}'[insist of running the array even if not all devices are present or some look odd]'
'(--readonly -o)'{--readonly,-o}'[start the array readonly]'
'(--name -N)'{--name=,-N}'[textual name for array - max 32 characters]:array name'
'(--bitmap-chunk)'--bitmap-chunk='[bitmap chunksize in Kilobytes]:bitmap chunk'
'(--delay -d)'{--delay,-d}'[bitmap update delay in seconds]:bitmap update delay'
)
fi
if (( $+words[(r)-([DEXQ]|-(detail|examine(|-bitmap)|query))] )); then
args=(
'(--zero-superblock)'--zero-superblock'[erase the MD superblock from a device]'
'(--run -R)'{--run,-R}'[start a partially built array]'
'(--stop -S)'{--stop,-S}'[deactivate array, releasing all resources]'
'(--readonly -o)'{--readonly,-o}'[mark array as readonly]'
'(--readwrite -w)'{--readwrite,-w}'[mark array as readwrite]'
'(--test -t)'{--test,-t}'[exit status 0 if ok, 1 if degrade, 2 if dead, 4 if missing]'
)
fi
if (( $+words[(r)-(F|-follow|-monitor)] )); then
args=(
'(--mail -m)'{--mail=,-m}'[address to mail alerts of failure to]:::_email_addresses'
'(--program -p --alert)'{--program=,-p,--alert=}'[program to run when an event is detected]::program:_files'
'(--delay -d)'{--delay=,-d}'[seconds of delay between polling state]:seconds'
'(--config -c)'{--config=,-c}'[specify a different config file]::config file:_files'
'(--scan -s)'{--scan,-s}'[find mail-address/program in config file]'
'(--daemonise -f)'{--daemonise,-f}'[fork and continue in child, parent exits]'
'(--pid-file -i)'{--pid-file=,-i}'[in daemon mode write pid to specified file instead of stdout]::PID file:_files'
'(--oneshot -1)'{--oneshot,-1}'[check for degraded arrays, then exit]'
'(--test -t)'{--test,-t}'[generate a TestMessage event against each array at startup]'
)
fi
if (( $+words[(r)-(G|-grow)] )); then
args=(
'(--size -z)'{--size=,-z}'[change the active size of devices in an array]:active size'
'(--raid-disks -n)'{--raid-disks=,-n}'[change the number of active devices in a RAID1 array]:number of active devices'
)
fi
_mds () {
local -a vals
vals=( ${${${(M)${(f)"$(< /etc/mdadm.conf)"}##ARRAY *}//ARRAY /}%%[[:blank:]]*} )
_describe -t mds "RAID devices" vals
_arguments \
"(-h --help)"{-h,--help}'[display a mode specific help message]'
}
modes=(-A --assemble -B --build -C --create -F --follow --monitor -G --grow -h --help -V --version)
misc=(-D --detail -E --examine -X --examine-bitmap -Q --query)
_arguments \
"($misc $modes)"{-A,--assemble}'[assemble a pre-existing array]:::_mds' \
"($misc $modes)"{-B,--build}'[build a legacy array without superblocks]:::_mds' \
"($misc $modes)"{-C,--create}'[create a new array]' \
"($misc $modes)"{-F,--follow,--monitor}'[select Monitor mode]' \
"($misc $modes)"{-G,--grow}'[change the size or shape of an active array]' \
"($modes -D --detail -E --examine -X --examine-bitmap)"{-D,--detail}'[print detail of one or more md devices]' \
"($modes -D --detail -E --examine -X --examine-bitmap -Q --query)"{-E,--examine}'[print content of md superblock on device(s)]' \
"($modes -Q --query)"{-Q,--query}'[examine a device]' \
"($modes -E --examine -X --examine-bitmap)"{-X,--examine-bitmap}'[report information about a bitmap file]' \
"(-)"{-h,--help}'[display general help message]' \
"(-)"{-V,--version}'[print version information for mdadm]' \
"$args[@]"
Copyright 2K16 - 2K18 Indonesian Hacker Rulez