@Jenda: já bych možná jeden dotaz měl, pokud jste v téhle lize :-)
Trochu si hraju s disklessama a NFS rootem. O ten diskless konec mi v tomto dotazu nejde. Na serveru (Debian tuším 9) mám NFS export v nějakém adresáři - v níže přiloženém skriptu mu říkám $DESTDIR. Řekněme že jsem ten adresář historicky naplnil debootstrapem a od té doby si s ním hraju. Když potřebuju něco poštelovat a nechce se mi startovat diskless klienta s kompletním RW přístupem, tak se prostě jenom chrootnu na NFS serveru do toho adresáře. Ovšem teprve poté, co jsem si bind-mountnul /proc /sys /dev a /run. No a záhada je, že pokud v tom chrootu provedu cosi složitějšího (tuším update-initramfs) a následně z toho chrootnutého shellu vypadnu, tak mi pak ty bind-mountnuté adresáře nejdou odmountovat. Že busy nebo co.
Tzn. jako kdyby tam nastartovali nějací démoni a zůstali běžet (odpojení od řídícího terminálu, jsouce démoni mají toto v povaze). Zatím jsem to vždycky řešil rebootem NFS serveru (celého stroje), resp. jakmile ty disklessy začaly bootovat, tak už si na tuhle práci startuju diskless s RW přístupem na NFS root.
Nemáte nápad, jak nějak rychle odhalit, co tam kde zůstalo viset? Zatím jsem nezkoušel ani fuser... Napadají mě komické bastly typu uložit si "ps" před a po a pak mezi nimi provést diff.
Mimochodem ten Debian na NFS serveru obsahuje systemd. Už to je okolnost, která může mít vliv. Minimálně jsem si chvíli lámal hlavu s bind-mountem, aby vůbec prošel. Viz ten skript.
#!/bin/sh
DESTDIR="/var/NFSboot/deb9_x86_64"
if [ -d "$DESTDIR" ]; then
# bind-mount what is necessary
# Beware: some old howtos still mention just "bind".
# With systemd, you need an explicit rslave.
# Otherwise, umount will either unmount both mountpoints,
# or fail with EBUSY. Either way you may end up with an awry /dev/ .
# https://wiki.debian.org/systemd#Shared_bind_mounts
# Either format should work: -o bind,rslave or stand-alone --options.
#mount -o bind,rslave /proc $DESTDIR/proc
mount --bind --make-rslave /proc $DESTDIR/proc
mount --bind --make-rslave /dev $DESTDIR/dev
mount --bind --make-rslave /sys $DESTDIR/sys
mount --bind --make-rslave /run $DESTDIR/run
chroot $DESTDIR /bin/bash
umount $DESTDIR/run
umount $DESTDIR/sys
umount $DESTDIR/dev
umount $DESTDIR/proc
else
echo "ERROR: the requested DESTDIR path $DESTDIR is not a directory."
echo "Not sure what to do, exiting."
echo ""
echo "Use this script to chroot into a destination subdirectory,"
echo "where you have a Linux distro installed, and you want to"
echo "do some work on it, with /proc /sys /dev /run bind-mounted,"
echo "without actually booting the Linux in the subdir."
exit 1
fi