]>
git.proxmox.com Git - mirror_zfs.git/blob - contrib/dracut/02zfsexpandknowledge/module-setup.sh.in
5 typ
=$
(udevadm info
--query=property
--name="$1" |
grep "^ID_FS_TYPE=" |
sed 's|^ID_FS_TYPE=||')
6 if [ "$typ" = "" ] ; then
7 typ
=$
(blkid
-c /dev
/null
"$1" -o value
-s TYPE
)
13 # also present in 99zfssystemd
15 local poolconfigoutput
19 poolconfigtemp
=`mktemp`
20 @sbindir@
/zpool list
-v -H -P "$1" > "$poolconfigtemp" 2>&1
21 if [ "$?" != "0" ] ; then
22 poolconfigoutput
=$
(cat "$poolconfigtemp")
23 dinfo
"zfsexpandknowledge: pool $1 cannot be listed: $poolconfigoutput"
25 cat "$poolconfigtemp" |
awk -F '\t' '/\t\/dev/ { print $2 }' | \
26 while read pooldev
; do
27 if [ -n "$pooldev" -a -e "$pooldev" ] ; then
28 if [ -h "$pooldev" ] ; then
29 resolved
=`readlink -f "$pooldev"`
33 dinfo
"zfsexpandknowledge: pool $1 has device $pooldev (which resolves to $resolved)"
38 rm -f "$poolconfigtemp"
41 find_zfs_block_devices
() {
49 local poolconfigoutput
50 numfields
=`head -1 /proc/self/mountinfo | awk '{print NF}'`
51 if [ "$numfields" == "10" ] ; then
52 fields
="n n n n mp n n fstype dev n"
54 fields
="n n n n mp n n n fstype dev n"
56 while read $fields ; do
57 if [ "$fstype" != "zfs" ]; then continue ; fi
58 if [ "$mp" == "$1" ]; then
59 pool
=$
(echo "$dev" | cut
-d / -f 1)
60 get_pool_devices
"$pool"
62 done < /proc
/self
/mountinfo
67 for e
in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
83 if [[ $hostonly ]]; then
99 mp
=$
(readlink
-f "$mp")
100 mountpoint
"$mp" >/dev
/null
2>&1 ||
continue
101 blockdevs
=$
(find_zfs_block_devices
"$mp")
102 if [ -z "$blockdevs" ] ; then continue ; fi
103 dinfo
"zfsexpandknowledge: block devices backing ZFS dataset $mp: $blockdevs"
104 for dev
in $blockdevs
106 array_contains
"$dev" "${host_devs[@]}" || host_devs
+=("$dev")
107 fstype
=$
(get_devtype
"$dev")
108 host_fs_types
["$dev"]="$fstype"
109 majmin
=$
(get_maj_min
"$dev")
110 if [[ -d /sys
/dev
/block
/$majmin/slaves
]] ; then
111 for _slavedev
in /sys
/dev
/block
/$majmin/slaves
/*; do
112 [[ -f $_slavedev/dev
]] ||
continue
113 _slavedev
=/dev
/$
(basename "$_slavedev")
114 _slavedevname
=$
(udevadm info
--query=property
--name="$_slavedev" |
grep "^DEVNAME=" |
sed 's|^DEVNAME=||')
115 _slavedevtype
=$
(get_devtype
"$_slavedevname")
116 _slavemajmin
=$
(get_maj_min
"$_slavedevname")
117 dinfo
"zfsexpandknowledge: slave block device backing ZFS dataset $mp: $_slavedevname"
118 array_contains
"$_slavedevname" "${host_devs[@]}" || host_devs
+=("$_slavedevname")
119 host_fs_types
["$_slavedevname"]="$_slavedevtype"
124 for a
in "${host_devs[@]}"
126 dinfo
"zfsexpandknowledge: host device $a"
128 for a
in "${!host_fs_types[@]}"
130 dinfo
"zfsexpandknowledge: device $a of type ${host_fs_types[$a]}"