LINUX.ORG.RU
ФорумAdmin

Как отмонтировать aufs без ошибок?

 


0

1

Дано:

Корень системы gentoo построен на squashfs со сжатием lzo + aufs для внесения изменений.

rootfs / rootfs rw 0 0
/dev/sda6 /mnt/squash ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0
/dev/loop0 /mnt/read squashfs ro,relatime 0 0
/dev/sda6 /mnt/write ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0
none / aufs rw,relatime,si=4c8e0f22 0 0
proc /proc proc rw,relatime 0 0
tmpfs /run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
rc-svcdir /lib/rc/init.d tmpfs rw,nosuid,nodev,noexec,relatime,size=1024k,mode=755 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
cgroup_root /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,relatime,size=10240k,mode=755 0 0
cpu /sys/fs/cgroup/cpu cgroup rw,nosuid,nodev,noexec,relatime,cpu 0 0
cpuacct /sys/fs/cgroup/cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct 0 0
freezer /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
blkio /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=10240k,nr_inodes=220548,mode=755 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
shm /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime 0 0
/dev/sda7 /usr/portage/distfiles ext4 rw,noatime,user_xattr,barrier=1,data=ordered 0 0
/dev/sda8 /usr/portage/packages ext4 rw,noatime,user_xattr,barrier=1,data=ordered 0 0
tmpfs /tmp tmpfs rw,noatime,size=10485760k 0 0
tmpfs /var/tmp/portage tmpfs rw,noatime,size=10485760k,nr_inodes=41943040 0 0
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0

При завершении работы файловые системы для записи не переводятся в режим только для чтения

#!/bin/sh
	sync && sync
	mount -no remount,ro / 
	for i in $writable_branches 
		do mount -no remount,ro $i 
	done
как следствие при старте запускается fsck и находятся 3 ошибочных инода.

Прошу подсказки. Не могу разобраться уже достаточно долгое время.

Почему не получается перемонтировать систему в режиме только для чтения? Заранее благодарен.

★★

Ответ на: комментарий от no-dashi
#!/bin/sh
	sync && sync
	mount -no remount,ro / 
	for i in $writable_branches 
		do mount -no remount,ro $i 
	done

Указал ведь, что sync (sync && sync) не помогает. Что держит не знаю как определить, поэтому и спрашиваю. Или не так он делается?

glibych ★★
() автор топика

Как отмонтировать корень на squashfs&aufs без ошибок?

Во первых ^ А во вторых почему бы не mksquashfs-нуть перед выключением в свежий squashfs?

init_6 ★★★★★
()

Благодарю, очень помогло)

А если серьезно, то во-первых корень не отмонтируется так запросто, пишет что занят. Предположил сделать sync и перемонтировать в ro. Но не помогает. Во-вторых зачем тратить 40-60 минут на выполнение mksquashfs без необходимости? Не вижу связи между выключением и mksquashfs.

P.S.

Может я не ясно выражаю свою мысль? Неужто никто не сталкивался до меня?

glibych ★★
() автор топика

С RAID и LVM для этого применяют initramfs, из которой из перемонтируется корень. Почему бы не сделать так же?

Lighting ★★★★★
()
Ответ на: комментарий от Lighting

Я так и делал в принципе - по другому корень не загрузится из сквошь. Вот мой скрипт init из initramfs:

#!/bin/busybox sh
mount -t proc none /proc
mount -t sysfs none /sys
/bin/busybox --install -s
mknod /dev/null c 1 3
mknod /dev/tty c 5 0
mdev -s
CMDLINE=$(cat /proc/cmdline)
for x in ${CMDLINE}
do
	case "${x}" in
		root=*)
			ROOT=${x#*=}
		;;
		real_resume=*)
			SWAP=${x#*=}
			swapon 	$SWAP
		;;
		cdboot)
			CDBOOT=1
		;;
		loop=*)
			LOOP=${x#*=}
		;;
		rootfs=*)
			ROOTFS=${x#*=}
		;;
	esac
done
mount -t $ROOTFS $ROOT /mnt/squash
loop_free=$(losetup -f)
losetup $loop_free /mnt/squash${LOOP}
mount -t squashfs $loop_free /mnt/read
if [ "${CDROOT}" = '1' ]
then
	mount -t tmpfs -o size=10G tmpfs /mnt/write
else
	mount /mnt/squash/mnt/write /mnt/write
fi
mount -t aufs -o rw,br:mnt/write=rw:/mnt/read=ro none /mnt/atomfs > /dev/null
mkdir -p /mnt/atomfs/mnt/write /mnt/atomfs/mnt/read /mnt/atomfs/mnt/squash
mount --move /mnt/write /mnt/atomfs/mnt/write
mount --move /mnt/read /mnt/atomfs/mnt/read
mount --move /mnt/squash /mnt/atomfs/mnt/squash
umount /proc
umount /sys
exec switch_root -c /dev/console /mnt/atomfs /sbin/init
echo "Failed, going to a shell"
exec /bin/sh

Может вместо aufs использовать что-нибудь другое для каскадного монтирования файловой системы корня?

glibych ★★
() автор топика

Ну попробуйте в конец этого скрипта запустить интерактивный шелл и из него пробовать отмонтировать или перемонтировать в ro. Может будет видно какой процесс мешает или что ещё.

mky ★★★★★
()

rootfs /dev/sda6 /dev/loop0 /dev/sda6 none proc tmpfs rc-svcdir sysfs cgroup_root cpu cpuacct freezer blkio udev fusectl devpts shm /dev/sda7 /dev/sda8 tmpfs tmpfs binfmt_misc

Монтируй, монтируй меня полностью.

anonymous
()
Ответ на: комментарий от mky

Спасибо. Если правильно понял идею, то до переключения корня выползти в шел и попробовать отмонтировать оттуда. Попробую.

glibych ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.