On 03/29/2012 10:38 PM, Dave Reisner wrote:
On Wed, Mar 28, 2012 at 11:30:08AM -0300, Gerardo Exequiel Pozzi wrote:
On 03/28/2012 10:44 AM, Dave Reisner wrote:
Is there any way to make something similar work with loop devices? You would need to disable the loop device before umounting the underlying file system. If we could solve this as well, then archiso probably wouldn't need its special shutdown hook anymore.
sure, lsblk loudly declares loop devices to be type loop. Hrmmm, archiso does a lot of weird stuff... in particular, the squashfs mounts are confusing me and/or lsblk. I'll get myself a newer image and poke around at what Gerardo is doing on setup...
I'm sure it's possible, I just need to understand what's happening.
d
Hello,
The first step on "shutdown" for archiso is a mount --move, since /oldroot depends on things from /oldroot/run/archiso. This make it a bit special.
So, I need to understand more about this... why is this done? Are you talk about this "mount --move" ? Because all things needed for /new_root/ are mounted on /run/archiso on initramfs. So all things are visible outside initramfs, nothing is hide to user (Thomas wants this some long time ago since AUFS-age). The current shutdown hook that I have in my tree gets archiso's wacky setup torn down properly sans loop devs. Add in a quick loop:
# assume starting in /sys/class/block for loop in loop*/loop; do losetup -d "${loop%/loop}" done This can be done in one step: losetup -D Anyway I am done in a special way because some loops are in used, then if ! losetup -d ${_lup} 2> /dev/null; then umount -d ${_lup} fi
Anyway there are special cases if copytoram is used, or cowdevice for persistent data, or iso-loopback mount, and iso via NBD. http://projects.archlinux.org/archiso.git/tree/archiso/archiso_shutdown
And everything seems to be torn down properly because I'm lazily unmounting everything.
Unmounting all devices. Disassembling stacked devices.
losetup: /dev/loop0: detach failed: Device or resource busy losetup: /dev/loop3: detach failed: Device or resource busy losetup: /dev/loop6: detach failed: Device or resource busy
# findmnt TARGET SOURCE FSTYPE OPTIONS / run[/initramfs] tmpfs rw,nosuid,nodev,relatime,mode=755 |-/sys sys sysfs rw,nosuid,nodev,noexec,relatime |-/proc proc proc rw,nosuid,nodev,noexec,relatime |-/dev /dev devtmpfs rw,nosuid,relatime,size=503104k,nr_inodes=125776,mode=75 `-/run run tmpfs rw,nosuid,nodev,relatime,mode=755
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 254:0 0 5G 0 disk |-vda1 254:1 0 100M 0 part `-vda2 254:2 0 4.9G 0 part sr0 11:0 1 200M 0 rom loop0 7:0 0 92.9M 1 loop loop3 7:3 0 34.3M 1 loop loop6 7:6 0 53M 1 loop
# losetup -a /dev/loop0: [2816]:1930 (/arch/x86_64/root-image.fs.sfs) /dev/loop3: [2816]:1926 (/arch/x86_64/lib-modules.fs.sfs) /dev/loop6: [2816]:1414 (/arch/any/usr-share.fs.sfs)
Those three errors are something that archiso hides. So, as far as I can tell, my hook is equivalent. Is there some serious problem with using lazy unmounting that makes this non-desirable? I can't really find any evidence of negative effects here.
d
Anyway using shutdown hook provided by mkinitcpio in archiso can not be a good idea archiso initramfs has a looots of kernel modules, shutdown hooks will copy all them to ram. (Yes, of course we can just still use our install/archiso_shutdown and using initcpio/shutdown script instead of initcpio/archiso_shutdown) -- Gerardo Exequiel Pozzi \cos^2\alpha + \sin^2\alpha = 1