X7ROOT File Manager
Current Path:
/usr/sbin
usr
/
sbin
/
📁
..
📄
accessdb
(11.55 KB)
📄
addgnupghome
(3.05 KB)
📄
addpart
(19.69 KB)
📄
adduser
(134.39 KB)
📄
agetty
(48.48 KB)
📄
alternatives
(27.61 KB)
📄
anacron
(35.52 KB)
📄
apachectl
(4.31 KB)
📄
applygnupgdefaults
(2.21 KB)
📄
arp
(63.98 KB)
📄
arpd
(52.98 KB)
📄
arping
(23.19 KB)
📄
atd
(27.17 KB)
📄
atrun
(67 B)
📄
audispd
(39.75 KB)
📄
auditctl
(39.56 KB)
📄
auditd
(125.65 KB)
📄
augenrules
(3.7 KB)
📄
aureport
(105.39 KB)
📄
ausearch
(109.8 KB)
📄
authconfig
(43.49 KB)
📄
authconfig-tui
(43.49 KB)
📄
autrace
(15.49 KB)
📄
avcstat
(11.25 KB)
📄
badblocks
(27.69 KB)
📄
biosdecode
(24.15 KB)
📄
blkdeactivate
(15.97 KB)
📄
blkdiscard
(23.84 KB)
📄
blkid
(77.92 KB)
📄
blkmapd
(43.81 KB)
📄
blockdev
(32.2 KB)
📄
bridge
(77.61 KB)
📄
btrfs
(690.59 KB)
📄
btrfs-convert
(378.62 KB)
📄
btrfs-debug-tree
(354.23 KB)
📄
btrfs-find-root
(346.22 KB)
📄
btrfs-image
(374.63 KB)
📄
btrfs-map-logical
(350.27 KB)
📄
btrfs-select-super
(346.2 KB)
📄
btrfs-zero-log
(346.2 KB)
📄
btrfsck
(690.59 KB)
📄
btrfstune
(350.24 KB)
📄
build-locale-archive
(860.52 KB)
📄
cacertdir_rehash
(644 B)
📄
capsh
(19.43 KB)
📄
cbq
(32.73 KB)
📄
cfdisk
(71.37 KB)
📄
chcpu
(23.7 KB)
📄
chgpasswd
(64.1 KB)
📄
chkconfig
(40.22 KB)
📄
chpasswd
(55.88 KB)
📄
chronyd
(263.08 KB)
📄
chroot
(32.48 KB)
📄
clock
(48.44 KB)
📄
clockdiff
(19.04 KB)
📄
consoletype
(6.95 KB)
📄
convertquota
(70.88 KB)
📄
cracklib-check
(7.04 KB)
📄
cracklib-format
(246 B)
📄
cracklib-packer
(11.06 KB)
📄
cracklib-unpacker
(7.02 KB)
📄
create-cracklib-dict
(990 B)
📄
crond
(68.48 KB)
📄
ctrlaltdel
(11.2 KB)
📄
ctstat
(20.09 KB)
📄
ddns-confgen
(19.44 KB)
📄
debugfs
(120.64 KB)
📄
delpart
(19.69 KB)
📄
depmod
(143.24 KB)
📄
devlink
(64.72 KB)
📄
dhclient
(414.34 KB)
📄
dhclient-script
(30.38 KB)
📄
dmfilemapd
(19.16 KB)
📄
dmidecode
(120.2 KB)
📄
dmsetup
(149.2 KB)
📄
dmstats
(149.2 KB)
📄
dnssec-checkds
(922 B)
📄
dnssec-coverage
(924 B)
📄
dnssec-dsfromkey
(56.6 KB)
📄
dnssec-importkey
(52.59 KB)
📄
dnssec-keyfromlabel
(60.52 KB)
📄
dnssec-keygen
(64.55 KB)
📄
dnssec-keymgr
(920 B)
📄
dnssec-revoke
(48.46 KB)
📄
dnssec-settime
(56.52 KB)
📄
dnssec-signzone
(105.71 KB)
📄
dnssec-verify
(48.46 KB)
📄
dovecot
(370.66 KB)
📄
dovecot_cpshutdown
(3.27 KB)
📄
dracut
(55.83 KB)
📄
dumpe2fs
(23.62 KB)
📄
e2freefrag
(11.15 KB)
📄
e2fsck
(250.55 KB)
📄
e2image
(27.85 KB)
📄
e2label
(69.41 KB)
📄
e2undo
(11.32 KB)
📄
e4defrag
(23.55 KB)
📄
eapol_test
(1.77 MB)
📄
edquota
(83.09 KB)
📄
ether-wake
(73.26 KB)
📄
ethtool
(293.87 KB)
📄
exicyclog
(11.01 KB)
📄
exigrep
(10.44 KB)
📄
exim
(1.33 MB)
📄
exim_checkaccess
(4.73 KB)
📄
exim_dbmbuild
(82.09 KB)
📄
exim_dumpdb
(134.47 KB)
📄
exim_fixdb
(168.22 KB)
📄
exim_lock
(64.66 KB)
📄
exim_tidydb
(142.8 KB)
📄
eximstats
(148.01 KB)
📄
exinext
(8.02 KB)
📄
exiqgrep
(5.46 KB)
📄
exiqsumm
(5.07 KB)
📄
exiwhat
(4.32 KB)
📄
exportfs
(76.91 KB)
📄
faillock
(15.02 KB)
📄
fcgistarter
(23.85 KB)
📄
fdformat
(11.27 KB)
📄
fdisk
(195.8 KB)
📄
filefrag
(15.23 KB)
📄
findfs
(11.2 KB)
📄
fixfiles
(11.03 KB)
📄
fsck
(32.12 KB)
📄
fsck.btrfs
(1.16 KB)
📄
fsck.cramfs
(19.57 KB)
📄
fsck.ext2
(250.55 KB)
📄
fsck.ext3
(250.55 KB)
📄
fsck.ext4
(250.55 KB)
📄
fsck.minix
(73.32 KB)
📄
fsck.xfs
(433 B)
📄
fsfreeze
(11.23 KB)
📄
fstrim
(40.59 KB)
📄
fuser
(32.34 KB)
📄
genhomedircon
(23.77 KB)
📄
genhostid
(6.94 KB)
📄
genl
(52.81 KB)
📄
genl-ctrl-list
(11.27 KB)
📄
genrandom
(11.16 KB)
📄
getcap
(11.13 KB)
📄
getenforce
(7.01 KB)
📄
getpcaps
(7.07 KB)
📄
getsebool
(11.13 KB)
📄
glibc_post_upgrade.x86_64
(772.05 KB)
📄
groupadd
(85.65 KB)
📄
groupdel
(77.38 KB)
📄
groupmems
(55.97 KB)
📄
groupmod
(85.66 KB)
📄
grpck
(59.93 KB)
📄
grpconv
(51.73 KB)
📄
grpunconv
(51.73 KB)
📄
grub2-bios-setup
(1.04 MB)
📄
grub2-get-kernel-settings
(2.08 KB)
📄
grub2-install
(1.29 MB)
📄
grub2-macbless
(1.02 MB)
📄
grub2-mkconfig
(7.63 KB)
📄
grub2-ofpathname
(225.5 KB)
📄
grub2-probe
(1.04 MB)
📄
grub2-reboot
(4 KB)
📄
grub2-rpm-sort
(262.53 KB)
📄
grub2-set-default
(3.46 KB)
📄
grub2-setpassword
(2.96 KB)
📄
grub2-sparc64-setup
(1.04 MB)
📄
grubby
(71.27 KB)
📄
gss-server
(23.13 KB)
📄
gssproxy
(130.64 KB)
📄
halt
(704.8 KB)
📄
hardlink
(15.29 KB)
📄
htcacheclean
(78.45 KB)
📄
httpd
(2.31 MB)
📄
hwclock
(48.44 KB)
📄
iconvconfig
(22.15 KB)
📄
iconvconfig.x86_64
(22.15 KB)
📄
ifcfg
(2.99 KB)
📄
ifconfig
(80.05 KB)
📄
ifdown
(1.61 KB)
📄
ifenslave
(19.74 KB)
📄
ifstat
(40.6 KB)
📄
ifup
(4.89 KB)
📄
init
(1.56 MB)
📄
insmod
(143.24 KB)
📄
install-info
(110.42 KB)
📄
installkernel
(2.69 KB)
📄
intel-microcode2ucode
(11.1 KB)
📄
ip
(459.59 KB)
📄
ip6tables
(91.52 KB)
📄
ip6tables-restore
(91.52 KB)
📄
ip6tables-save
(91.52 KB)
📄
ipmaddr
(19.33 KB)
📄
iptables
(91.52 KB)
📄
iptables-restore
(91.52 KB)
📄
iptables-save
(91.52 KB)
📄
iptunnel
(23.33 KB)
📄
irqbalance
(48.5 KB)
📄
isc-hmac-fixup
(11.2 KB)
📄
kexec
(166.06 KB)
📄
key.dns_resolver
(19.45 KB)
📄
killall5
(23.17 KB)
📄
kpartx
(39.47 KB)
📄
lchage
(15.41 KB)
📄
ldattach
(27.93 KB)
📄
ldconfig
(952.08 KB)
📄
lgroupadd
(11.28 KB)
📄
lgroupdel
(11.26 KB)
📄
lgroupmod
(15.44 KB)
📄
lid
(15.4 KB)
📄
lnewusers
(15.46 KB)
📄
lnstat
(20.09 KB)
📄
load_policy
(10.97 KB)
📄
logrotate
(68.61 KB)
📄
logsave
(11.27 KB)
📄
losetup
(82.45 KB)
📄
lpasswd
(15.5 KB)
📄
lshw
(895.18 KB)
📄
lsmod
(143.24 KB)
📄
lsof
(150.57 KB)
📄
luseradd
(15.38 KB)
📄
luserdel
(11.3 KB)
📄
lusermod
(19.43 KB)
📄
lwresd
(768.04 KB)
📄
makedumpfile
(376.52 KB)
📄
matchpathcon
(11.19 KB)
📄
mii-diag
(20.08 KB)
📄
mii-tool
(19.51 KB)
📄
mkdict
(246 B)
📄
mkdumprd
(13.99 KB)
📄
mke2fs
(94.08 KB)
📄
mkfs
(11.25 KB)
📄
mkfs.btrfs
(366.45 KB)
📄
mkfs.cramfs
(36.16 KB)
📄
mkfs.ext2
(94.08 KB)
📄
mkfs.ext3
(94.08 KB)
📄
mkfs.ext4
(94.08 KB)
📄
mkfs.minix
(36.27 KB)
📄
mkfs.xfs
(359.8 KB)
📄
mkhomedir_helper
(19.05 KB)
📄
mklost+found
(11.11 KB)
📄
mkswap
(69.64 KB)
📄
modinfo
(143.24 KB)
📄
modprobe
(143.24 KB)
📄
modsec-sdbm-util
(22.17 KB)
📄
mount.nfs
(114.68 KB)
📄
mount.nfs4
(114.68 KB)
📄
mountstats
(40.59 KB)
📄
mysqld
(244.14 MB)
📄
mysqld-debug
(165.52 MB)
📄
named
(768.04 KB)
📄
named-checkconf
(32.25 KB)
📄
named-checkzone
(32.06 KB)
📄
named-compilezone
(32.06 KB)
📄
named-journalprint
(11.13 KB)
📄
nameif
(15.32 KB)
📄
netreport
(10.96 KB)
📄
new-kernel-pkg
(24.96 KB)
📄
newusers
(93.45 KB)
📄
nfsdcltrack
(40.11 KB)
📄
nfsidmap
(19.32 KB)
📄
nfsiostat
(23.64 KB)
📄
nfsstat
(29.84 KB)
📄
nl-class-add
(11.7 KB)
📄
nl-class-delete
(11.55 KB)
📄
nl-class-list
(11.48 KB)
📄
nl-classid-lookup
(11.29 KB)
📄
nl-cls-add
(11.76 KB)
📄
nl-cls-delete
(11.68 KB)
📄
nl-cls-list
(11.58 KB)
📄
nl-link-list
(11.52 KB)
📄
nl-pktloc-lookup
(11.36 KB)
📄
nl-qdisc-add
(11.6 KB)
📄
nl-qdisc-delete
(11.54 KB)
📄
nl-qdisc-list
(11.63 KB)
📄
nologin
(7.01 KB)
📄
nscd
(180.02 KB)
📄
nsec3hash
(11.13 KB)
📄
nstat
(23.88 KB)
📄
osd_login
(2.55 KB)
📄
ownership
(15.04 KB)
📄
packer
(11.06 KB)
📄
pam_console_apply
(39.69 KB)
📄
pam_tally2
(15.05 KB)
📄
pam_timestamp_check
(10.97 KB)
📄
paperconfig
(4.07 KB)
📄
parted
(77.22 KB)
📄
partprobe
(11.23 KB)
📄
partx
(86.55 KB)
📄
pdns_server
(98.68 MB)
📄
pidof
(23.17 KB)
📄
ping6
(64.63 KB)
📄
pivot_root
(11.19 KB)
📄
plipconfig
(11.06 KB)
📄
poweroff
(704.8 KB)
📄
ppp-watch
(23.2 KB)
📄
pwck
(51.71 KB)
📄
pwconv
(47.57 KB)
📄
pwhistory_helper
(15.44 KB)
📄
pwunconv
(47.59 KB)
📄
quot
(70.66 KB)
📄
quotacheck
(107.29 KB)
📄
quotaoff
(75.03 KB)
📄
quotaon
(75.03 KB)
📄
quotastats
(14.03 KB)
📄
rdisc
(23.17 KB)
📄
rdma
(73.42 KB)
📄
readprofile
(15.46 KB)
📄
reboot
(704.8 KB)
📄
repquota
(75.16 KB)
📄
request-key
(19.41 KB)
📄
resize2fs
(48.41 KB)
📄
resizepart
(32.36 KB)
📄
restorecon
(27.16 KB)
📄
rmmod
(143.24 KB)
📄
rndc
(35.88 KB)
📄
rndc-confgen
(19.44 KB)
📄
rotatelogs
(53 KB)
📄
route
(66.6 KB)
📄
routef
(173 B)
📄
routel
(1.59 KB)
📄
rpc.gssd
(88.73 KB)
📄
rpc.idmapd
(48.13 KB)
📄
rpc.mountd
(128.91 KB)
📄
rpc.nfsd
(40.2 KB)
📄
rpc.rquotad
(78.95 KB)
📄
rpc.statd
(97.59 KB)
📄
rpcbind
(60.07 KB)
📄
rpcdebug
(18.05 KB)
📄
rpcinfo
(27.3 KB)
📄
rsyslogd
(648.45 KB)
📄
rtacct
(41.93 KB)
📄
rtcwake
(31.96 KB)
📄
rtmon
(48.67 KB)
📄
rtpr
(37 B)
📄
rtstat
(20.09 KB)
📄
runlevel
(704.8 KB)
📄
runq
(1.33 MB)
📄
runuser
(32.21 KB)
📄
safe_finger
(11.08 KB)
📄
sasldblistusers2
(19.26 KB)
📄
saslpasswd2
(15.09 KB)
📄
sefcontext_compile
(60.53 KB)
📄
selabel_digest
(11.17 KB)
📄
selabel_lookup
(11.14 KB)
📄
selabel_lookup_best_match
(11.16 KB)
📄
selabel_partial_match
(11.09 KB)
📄
selinux_restorecon
(15.21 KB)
📄
selinuxconlist
(11.1 KB)
📄
selinuxdefcon
(11.12 KB)
📄
selinuxenabled
(6.98 KB)
📄
selinuxexeccon
(7.09 KB)
📄
semanage
(42.76 KB)
📄
semodule
(23.77 KB)
📄
sendmail
(13.48 KB)
📄
service
(3.17 KB)
📄
sestatus
(15.02 KB)
📄
setcap
(11.13 KB)
📄
setenforce
(7.05 KB)
📄
setfiles
(27.16 KB)
📄
setquota
(83.16 KB)
📄
setsebool
(14.99 KB)
📄
sfdisk
(83.25 KB)
📄
showmount
(19.56 KB)
📄
shutdown
(704.8 KB)
📄
sim_server
(10.97 KB)
📄
slattach
(42.4 KB)
📄
sln
(743.78 KB)
📄
sm-notify
(68.43 KB)
📄
smartctl
(864.48 KB)
📄
smartd
(670.63 KB)
📄
ss
(128.44 KB)
📄
sshd
(836.88 KB)
📄
sshd-keygen
(3.53 KB)
📄
start-statd
(842 B)
📄
suexec
(43.3 KB)
📄
sulogin
(40.53 KB)
📄
sushell
(67 B)
📄
swaplabel
(15.31 KB)
📄
swapoff
(15.53 KB)
📄
swapon
(53.29 KB)
📄
switch_root
(15.35 KB)
📄
sys-unconfig
(184 B)
📄
sysctl
(23.57 KB)
📄
tc
(384.66 KB)
📄
tcpd
(36.62 KB)
📄
tcpdmatch
(40.83 KB)
📄
telinit
(704.8 KB)
📄
tracepath
(15.05 KB)
📄
tracepath6
(15.05 KB)
📄
try-from
(23.47 KB)
📄
tsig-keygen
(19.44 KB)
📄
tune2fs
(69.41 KB)
📄
tuned
(3.29 KB)
📄
tuned-adm
(5.22 KB)
📄
udevadm
(414.27 KB)
📄
umount.nfs
(114.68 KB)
📄
umount.nfs4
(114.68 KB)
📄
unix_chkpwd
(35.42 KB)
📄
unix_update
(35.42 KB)
📄
update-alternatives
(27.61 KB)
📄
update-smart-drivedb
(14.34 KB)
📄
useradd
(134.39 KB)
📄
userdel
(93.5 KB)
📄
usermod
(130.33 KB)
📄
usernetctl
(11.03 KB)
📄
uuserver
(14.97 KB)
📄
vigr
(62.54 KB)
📄
vipw
(62.54 KB)
📄
virt-what
(11.57 KB)
📄
visudo
(200.91 KB)
📄
vmcore-dmesg
(19.28 KB)
📄
vpddecode
(15.33 KB)
📄
weak-modules
(31.9 KB)
📄
whmapi0
(3.02 MB)
📄
whmapi1
(3.02 MB)
📄
whmlogin
(2.33 KB)
📄
wipefs
(28.05 KB)
📄
wpa_cli
(128.06 KB)
📄
wpa_passphrase
(56.79 KB)
📄
wpa_supplicant
(1.93 MB)
📄
xfs_admin
(1.35 KB)
📄
xfs_bmap
(638 B)
📄
xfs_copy
(339.33 KB)
📄
xfs_db
(576.38 KB)
📄
xfs_estimate
(11.16 KB)
📄
xfs_freeze
(767 B)
📄
xfs_fsr
(31.83 KB)
📄
xfs_growfs
(327.2 KB)
📄
xfs_info
(472 B)
📄
xfs_io
(122.68 KB)
📄
xfs_logprint
(355.81 KB)
📄
xfs_mdrestore
(314.81 KB)
📄
xfs_metadump
(747 B)
📄
xfs_mkfile
(1007 B)
📄
xfs_ncheck
(650 B)
📄
xfs_quota
(84.88 KB)
📄
xfs_repair
(563.2 KB)
📄
xfs_rtcp
(15.25 KB)
📄
xqmstats
(14.03 KB)
📄
xtables-multi
(91.52 KB)
📄
yum-complete-transaction
(9.22 KB)
📄
yumdb
(8.67 KB)
📄
zdump
(14.02 KB)
📄
zic
(50.02 KB)
📄
zramctl
(82.23 KB)
Editing: blkdeactivate
#!/bin/bash # # Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions # of the GNU General Public License v.2. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # # Author: Peter Rajnoha <prajnoha at redhat.com> # # Script for deactivating block devices # # Requires: # bash >= 4.0 (associative array support) # util-linux { # lsblk >= 2.22 (lsblk -s support) # umount # } # dmsetup >= 1.02.68 (--retry option support) # lvm >= 2.2.89 (activation/retry_deactivation config support) # #set -x shopt -s dotglob nullglob TOOL=blkdeactivate DEV_DIR="/dev" SYS_BLK_DIR="/sys/block" MDADM="/sbin/mdadm" MOUNTPOINT="/bin/mountpoint" MPATHD="/sbin/multipathd" UMOUNT="/bin/umount" VDO="/bin/vdo" sbindir="/usr/sbin" DMSETUP="$sbindir/dmsetup" LVM="$sbindir/lvm" if "$UMOUNT" --help | grep -- "--all-targets" >"$DEV_DIR/null"; then UMOUNT_OPTS="--all-targets " else UMOUNT_OPTS="" FINDMNT="/bin/findmnt -r --noheadings -u -o TARGET" FINDMNT_READ="read -r mnt" fi DMSETUP_OPTS="" LVM_OPTS="" MDADM_OPTS="" MPATHD_OPTS="" VDO_OPTS="" LSBLK="/bin/lsblk -r --noheadings -o TYPE,KNAME,NAME,MOUNTPOINT" LSBLK_VARS="local devtype local kname local name local mnt" LSBLK_READ="read -r devtype kname name mnt" SORT_MNT="/bin/sort -r -u -k 4" # Do not show tool errors by default (only done/skipping summary # message provided by this script) and no verbose mode by default. ERRORS=0 VERBOSE=0 # Do not unmount mounted devices by default. DO_UMOUNT=0 # Deactivate each LV separately by default (not the whole VG). LVM_DO_WHOLE_VG=0 # Do not retry LV deactivation by default. LVM_CONFIG="activation{retry_deactivation=0}" # Do not wait for MD RAID device resync, recovery or reshape. MDRAID_DO_WAIT=0 # Do not disable queueing if set on multipath devices. MPATHD_DO_DISABLEQUEUEING=0 # # List of device names and/or VGs to be skipped. # Device name is the KNAME from lsblk output. # # If deactivation of any device fails, it's automatically # added to the SKIP_DEVICE_LIST (also a particular VG # added to the SKIP_VG_LIST for a device that is an LV). # # These lists provide device tree pruning to skip # particular device/VG deactivation that failed already. # (lists are associative arrays!) # declare -A SKIP_DEVICE_LIST=() declare -A SKIP_VG_LIST=() # # List of mountpoints to be skipped. Any device that is mounted on the mountpoint # listed here will be added to SKIP_DEVICE_LIST (and SKIP_VG_LIST) automatically. # (list is an associative array!) # declare -A SKIP_UMOUNT_LIST=(["/"]=1 \ ["/lib"]=1 ["/lib64"]=1 \ ["/bin"]=1 ["/sbin"]=1 \ ["/var"]=1 ["/var/log"]=1 \ ["/usr"]=1 \ ["/usr/lib"]=1 ["/usr/lib64"]=1 \ ["/usr/sbin"]=1 ["/usr/bin"]=1) # Bash can't properly handle '[' and ']' used as a subscript # within the '()'initialization - it needs to be done separately! SKIP_UMOUNT_LIST["[SWAP]"]=1 usage() { echo "${TOOL}: Utility to deactivate block devices" echo echo " ${TOOL} [options] [device...]" echo " - Deactivate block device tree." echo " If devices are specified, deactivate only supplied devices and their holders." echo echo " Options:" echo " -e | --errors Show errors reported from tools" echo " -h | --help Show this help message" echo " -d | --dmoptions DM_OPTIONS Comma separated DM specific options" echo " -l | --lvmoptions LVM_OPTIONS Comma separated LVM specific options" echo " -m | --mpathoptions MPATH_OPTIONS Comma separated DM-multipath specific options" echo " -r | --mdraidoptions MDRAID_OPTIONS Comma separated MD RAID specific options" echo " -o | --vdooptions VDO_OPTIONS Comma separated VDO specific options" echo " -u | --umount Unmount the device if mounted" echo " -v | --verbose Verbose mode (also implies -e)" echo echo " Device specific options:" echo " DM_OPTIONS:" echo " retry retry removal several times in case of failure" echo " force force device removal" echo " LVM_OPTIONS:" echo " retry retry removal several times in case of failure" echo " wholevg deactivate the whole VG when processing an LV" echo " MDRAID_OPTIONS:" echo " wait wait for resync, recovery or reshape to complete first" echo " MPATH_OPTIONS:" echo " disablequeueing disable queueing on all DM-multipath devices first" echo " VDO_OPTIONS:" echo " configfile=file use specified VDO configuration file" exit } add_device_to_skip_list() { SKIP_DEVICE_LIST+=(["$kname"]=1) return 1 } add_vg_to_skip_list() { SKIP_VG_LIST+=(["$DM_VG_NAME"]=1) return 1 } is_top_level_device() { # top level devices do not have any holders, that is # the SYS_BLK_DIR/<device_name>/holders dir is empty files=$(echo "$SYS_BLK_DIR/$kname/holders/"*) test -z "$files" } device_umount_one() { test -z "$mnt" && return 0 if test -z "${SKIP_UMOUNT_LIST["$mnt"]}" -a "$DO_UMOUNT" -eq "1"; then echo -n " [UMOUNT]: unmounting $name ($kname) mounted on $mnt... " if eval "$UMOUNT" $UMOUNT_OPTS "$(printf "%s" "$mnt")" "$OUT" "$ERR"; then echo "done" elif "$MOUNTPOINT" -q "$mnt"; then echo "skipping" add_device_to_skip_list else echo "already unmounted" fi else echo " [SKIP]: unmount of $name ($kname) mounted on $mnt" add_device_to_skip_list fi } device_umount() { test "$devtype" != "lvm" && test "${kname:0:3}" != "dm-" \ && test "${kname:0:2}" != "md" && return 0 # FINDMNT is defined only if umount --all-targets is not available. # In that case, read the list of multiple mount points of one device # using FINDMNT and unmount it one by one manually. if test -z "$FINDMNT"; then device_umount_one else while $FINDMNT_READ; do device_umount_one || return 1 done <<< "$($FINDMNT "$DEV_DIR/$kname")" fi } deactivate_holders () { local skip=1; $LSBLK_VARS # Get holders for the device - either a mount or another device. # First line on the lsblk output is the device itself - skip it for # the deactivate call as this device is already being deactivated. while $LSBLK_READ; do test -e "$SYS_BLK_DIR/$kname" || continue # check if the device not on the skip list already test -z "${SKIP_DEVICE_LIST["$kname"]}" || return 1 # try to deactivate the holder test "$skip" -eq 1 && skip=0 && continue deactivate || return 1 done <<< "$($LSBLK "$1")" } deactivate_dm () { local xname xname=$(printf "%s" "$name") test -b "$DEV_DIR/mapper/$xname" || return 0 test -z "${SKIP_DEVICE_LIST["$kname"]}" || return 1 deactivate_holders "$DEV_DIR/mapper/$xname" || return 1 echo -n " [DM]: deactivating $devtype device $xname ($kname)... " if eval "$DMSETUP" $DMSETUP_OPTS remove "$xname" "$OUT" "$ERR"; then echo "done" else echo "skipping" add_device_to_skip_list fi } deactivate_lvm () { local DM_VG_NAME; local DM_LV_NAME eval "$(eval "$DMSETUP" splitname --nameprefixes --noheadings --rows "$name" LVM "$ERR")" test -b "$DEV_DIR/$DM_VG_NAME/$DM_LV_NAME" || return 0 test -z "${SKIP_VG_LIST["$DM_VG_NAME"]}" || return 1 if test "$LVM_DO_WHOLE_VG" -eq 0; then # Skip LVM device deactivation if LVM tools missing. test "$LVM_AVAILABLE" -eq 0 && { add_device_to_skip_list return 1 } # Deactivating only the LV specified deactivate_holders "$DEV_DIR/$DM_VG_NAME/$DM_LV_NAME" || { add_device_to_skip_list return 1 } echo -n " [LVM]: deactivating Logical Volume $DM_VG_NAME/$DM_LV_NAME... " if eval "$LVM" lvchange $LVM_OPTS --config \'log\{prefix=\"\"\} $LVM_CONFIG\' -aln "$DM_VG_NAME/$DM_LV_NAME" "$OUT" "$ERR"; then echo "done" else echo "skipping" add_device_to_skip_list fi else # Skip LVM VG deactivation if LVM tools missing. test "$LVM_AVAILABLE" -eq 0 && { add_vg_to_skip_list return 1 } # Deactivating the whole VG the LV is part of lv_list=$(eval "$LVM" vgs --config "$LVM_CONFIG" --noheadings --rows -o lv_name "$DM_VG_NAME" "$ERR") for lv in $lv_list; do test -b "$DEV_DIR/$DM_VG_NAME/$lv" || continue deactivate_holders "$DEV_DIR/$DM_VG_NAME/$lv" || { add_vg_to_skip_list return 1 } done echo -n " [LVM]: deactivating Volume Group $DM_VG_NAME... " if eval "$LVM" vgchange $LVM_OPTS --config \'log\{prefix=\" \"\} $LVM_CONFIG\' -aln "$DM_VG_NAME" "$OUT" "$ERR"; then echo "done" else echo "skipping" add_vg_to_skip_list fi fi } deactivate_md () { local xname xname=$(printf "%s" "$name") local sync_action test -b "$DEV_DIR/$xname" || return 0 test -z "${SKIP_DEVICE_LIST["$kname"]}" || return 1 # Skip MD device deactivation if MD tools missing. test "$MDADM_AVAILABLE" -eq 0 && { add_device_to_skip_list return 1 } deactivate_holders "$DEV_DIR/$xname" || return 1 echo -n " [MD]: deactivating $devtype device $kname... " test "$MDRAID_DO_WAIT" -eq 1 && { sync_action=$(cat "$SYS_BLK_DIR/$kname/md/sync_action") test "$sync_action" != "idle" && { echo -n "$sync_action action in progress... " if eval "$MDADM" $MDADM_OPTS -W "$DEV_DIR/$kname" "$OUT" "$ERR"; then echo -n "complete... " else test $? -ne 1 && echo -n "failed to wait for $sync_action action... " fi } } if eval "$MDADM" $MDADM_OPTS -S "$xname" "$OUT" "$ERR"; then echo "done" else echo "skipping" add_device_to_skip_list fi } deactivate_vdo() { local xname xname=$(printf "%s" "$name") test -b "$DEV_DIR/mapper/$xname" || return 0 test -z "${SKIP_DEVICE_LIST["$kname"]}" || return 1 # Skip VDO device deactivation if VDO tools missing. test "$VDO_AVAILABLE" -eq 0 && { add_device_to_skip_list return 1 } deactivate_holders "$DEV_DIR/mapper/$xname" || return 1 echo -n " [VDO]: deactivating VDO volume $xname... " if eval "$VDO" stop $VDO_OPTS --name="$xname" "$OUT" "$ERR"; then echo "done" else echo "skipping" add_device_to_skip_list fi } deactivate () { ###################################################################### # DEACTIVATION HOOKS FOR NEW DEVICE TYPES GO HERE! # # # # Identify a new device type either by inspecting the TYPE provided # # by lsblk directly ($devtype) or by any other mean that is suitable # # e.g. the KNAME provided by lsblk ($kname). See $LSBLK_VARS for # # complete list of variables that may be used. Then call a # # device-specific deactivation function that handles the exact type. # # # # This device-specific function will certainly need to call # # deactivate_holders first to recursively deactivate any existing # # holders it might have before deactivating the device it processes. # ###################################################################### if test "$devtype" = "lvm"; then deactivate_lvm elif test "$devtype" = "vdo"; then deactivate_vdo elif test "${kname:0:3}" = "dm-"; then deactivate_dm elif test "${kname:0:2}" = "md"; then deactivate_md fi } deactivate_all() { $LSBLK_VARS skip=0 echo "Deactivating block devices:" test "$MPATHD_RUNNING" -eq 1 && { echo -n " [DM]: disabling queueing on all multipath devices... " eval "$MPATHD" $MPATHD_OPTS disablequeueing maps "$ERR" | grep '^ok$' >"$DEV_DIR/null" && echo "done" || echo "failed" } if test $# -eq 0; then ####################### # Process all devices # ####################### # Unmount all relevant mountpoints first while $LSBLK_READ; do device_umount done <<< "$($LSBLK | $SORT_MNT)" # Do deactivate while $LSBLK_READ; do # 'disk' is at the bottom already and it's a real device test "$devtype" = "disk" && continue # if deactivation of any device fails, skip processing # any subsequent devices within its subtree as the # top-level device could not be deactivated anyway test "$skip" -eq 1 && { # reset 'skip' on top level device if is_top_level_device ; then skip=0 else continue fi } # check if the device is not on the skip list already test -z "${SKIP_DEVICE_LIST["$kname"]}" || continue # try to deactivate top-level device, set 'skip=1' # if it fails to do so - this will cause all the # device's subtree to be skipped when processing # devices further in this loop deactivate || skip=1 done <<< "$($LSBLK -s)" else ################################## # Process only specified devices # ################################## while test $# -ne 0; do # Unmount all relevant mountpoints first while $LSBLK_READ; do device_umount done <<< "$($LSBLK "$1" | $SORT_MNT)" # Do deactivate # Single dm device tree deactivation. if test -b "$1"; then $LSBLK_READ <<< "$($LSBLK --nodeps "$1")" # check if the device is not on the skip list already test -z "${SKIP_DEVICE_LIST["$kname"]}" || { shift continue } deactivate else echo "$1: device not found" return 1 fi shift done; fi } get_dmopts() { ORIG_IFS=$IFS; IFS=',' for opt in $1; do case $opt in "") ;; "retry") DMSETUP_OPTS+="--retry " ;; "force") DMSETUP_OPTS+="--force " ;; *) echo "$opt: unknown DM option" esac done IFS=$ORIG_IFS } get_lvmopts() { ORIG_IFS=$IFS; IFS=',' for opt in $1; do case "$opt" in "") ;; "retry") LVM_CONFIG="activation{retry_deactivation=1}" ;; "wholevg") LVM_DO_WHOLE_VG=1 ;; *) echo "$opt: unknown LVM option" esac done IFS=$ORIG_IFS } get_mdraidopts() { ORIG_IFS=$IFS; IFS=',' for opt in $1; do case "$opt" in "") ;; "wait") MDRAID_DO_WAIT=1 ;; *) echo "$opt: unknown MD RAID option" esac done IFS=$ORIG_IFS } get_mpathopts() { ORIG_IFS=$IFS; IFS=',' for opt in $1; do case "$opt" in "") ;; "disablequeueing") MPATHD_DO_DISABLEQUEUEING=1 ;; *) echo "$opt: unknown DM-multipath option" esac done IFS=$ORIG_IFS } get_vdoopts() { ORIG_IFS=$IFS; IFS=',' for opt in $1; do case "$opt" in "") ;; configfile=*) tmp=${opt#*=}; VDO_OPTS+="--confFile=${tmp%%,*} " ;; *) echo "$opt: unknown VDO option" esac done IFS=$ORIG_IFS } set_env() { if test "$ERRORS" -eq "1"; then unset ERR else ERR="2>$DEV_DIR/null" fi if test "$VERBOSE" -eq "1"; then unset OUT UMOUNT_OPTS+="-v" DMSETUP_OPTS+="-vvvv" LVM_OPTS+="-vvvv" MDADM_OPTS+="-vv" MPATHD_OPTS+="-v 3" VDO_OPTS+="--verbose " else OUT="1>$DEV_DIR/null" fi if test -f "$LVM"; then LVM_AVAILABLE=1 else LVM_AVAILABLE=0 fi if test -f $MDADM; then MDADM_AVAILABLE=1 else MDADM_AVAILABLE=0 fi if test -f $VDO; then VDO_AVAILABLE=1 else VDO_AVAILABLE=0 fi MPATHD_RUNNING=0 test "$MPATHD_DO_DISABLEQUEUEING" -eq 1 && { if test -f "$MPATHD"; then if eval "$MPATHD" show daemon "$ERR" | grep "running" >"$DEV_DIR/null"; then MPATHD_RUNNING=1 fi fi } } while test $# -ne 0; do case "$1" in "") ;; "-e"|"--errors") ERRORS=1 ;; "-h"|"--help") usage ;; "-d"|"--dmoptions") get_dmopts "$2" ; shift ;; "-l"|"--lvmoptions") get_lvmopts "$2" ; shift ;; "-m"|"--mpathoptions") get_mpathopts "$2" ; shift ;; "-r"|"--mdraidoptions") get_mdraidopts "$2"; shift ;; "-o"|"--vdooptions") get_vdoopts "$2"; shift ;; "-u"|"--umount") DO_UMOUNT=1 ;; "-v"|"--verbose") VERBOSE=1 ; ERRORS=1 ;; "-vv") VERBOSE=1 ; ERRORS=1 ; set -x ;; *) break ;; esac shift done set_env deactivate_all "$@"
Upload File
Create Folder