Re: [心得] 閒聊+雙系統另種選擇 loopdevice
繼上次完全使用loopfiles boot起來後
後續發現有些不明情況 會看不到放loopfiles的partition
如今可成功使用 mount --move 的方式改進
又順便修改成參數化的方式設定
所以原本只新增3行到linuxrc 變成新增3部份
part1: 參數讀取
part2: 解析UUID=, LABEL=; mount and losetup.
part3: mount --move
在grub.cfg內的用法: ( 因過長 實為為同一行)
linux vmlinuz loops_dev=LABEL=LOOPS loops_mnt=/loops loop_file=loop.ext4
root=LABEL=ROOT rootfstype=ext4 ro
ROOT起來後 可以在//ROOT/loops/ 內再掛其他loopfiles 到/usr, /var, /home ...
以下為執行diff比較 原與新的差異結果
====================================
49a50,59
> # zm 1: for boot from loop file
> loops_dev=*)
> LOOPS_DEV=${x#*=}
> ;;
> loops_mnt=*)
> LOOPS_MNT=${x#*=}
> ;;
> loop_file=*)
> LOOP_FILE=${x#*=}
> ;; #
485a496,543
> # zm 2: find the device which contains loop files, mount and losetup.
> if [ -n "${LOOP_FILE}" ]; then
>
> if [ -z "${LOOPS_MNT}" ]; then
> LOOPS_MNT='/loops'
> fi
>
> MNT_DEV=""
> while [ "${MNT_DEV}" = '' ]
> do
> case "${LOOPS_DEV}" in
> LABEL=*|UUID=*)
>
> retval=1
>
> if [ ${retval} -ne 0 ]; then
> MNT_DEV=$(findfs "${LOOPS_DEV}" )
> # MNT_DEV=$(findfs "${LOOPS_DEV}" 2>/dev/null)
> retval=$?
> fi
>
> if [ ${retval} -ne 0 ]; then
> MNT_DEV=$(busybox findfs "${LOOPS_DEV}" )
> # MNT_DEV=$(busybox findfs "${LOOPS_DEV}" 2>/dev/null)
> retval=$?
> fi
>
> if [ ${retval} -ne 0 ]; then
> MNT_DEV=$(blkid -o device -l -t "${LOOPS_DEV}")
> retval=$?
> fi
>
> if [ ${retval} -eq 0 ] && [ -n "${MNT_DEV}" ]; then
> good_msg "Detected loops_dev=${MNT_DEV}"
> else
> prompt_user "MNT_DEV" "block device"
> continue
> fi
> ;;
>
> esac
> done;
>
> mkdir -p ${LOOPS_MNT}
> mount ${MNT_DEV} ${LOOPS_MNT}
> losetup /dev/loop0 "${LOOPS_MNT}/${LOOP_FILE}"
> fi # zm
>
521a580
>
995a1055
> #
1006a1067,1075
>
> # zm 3: move LOOPS_MNT from initramfs to real root
> if [ -n "${LOOP_FILE}" ]; then
> if [ ! -e "${CHROOT}${LOOPS_MNT}" ]; then
> mkdir -p "${CHROOT}${LOOPS_MNT}"
> fi
> mount --move "${LOOPS_MNT}" "${CHROOT}${LOOPS_MNT}"
> good_msg "Remounting loop_dev=${LOOPS_DEV} to ${CHROOT}${LOOPS_MNT}"
> fi #
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.161.40.10
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1499124308.A.EDB.html
推
07/04 12:12, , 1F
07/04 12:12, 1F
→
07/04 12:31, , 2F
07/04 12:31, 2F
這是比較像vitualbox, qemu的方式 不同的地方是讓實機來跑
不過想讓讓虛擬機跑也是可以喔
要多編虛擬機的用到的driver到kernel 上一篇有成功
LiveCD是比較複雜點的作法 例如有的是用 SquashFS + OverlayFS
目前正在實驗中 想參考LiveCD 結合squashfs, overlayfs, loop_device, ramdisk 做出
1.唯讀的SquashFS image 掛到/dev/loop0 在initram中設為Overlay 的lowerdir
2.一個ssd上的 ext4 image 掛到/dev/loop1 在initram中設為upperdir與workdir
upperdir 可以當snapshot
3.用ramdisk當 overlay 的mergedir
4.以mergedir 當root 用來boot
5.隔週或一段期間可將upper回存lower後 備份lower 再重置overlay
把loop_device和ramdisk拿掉 就是liveCD的方法了
好像沒必要硬要用loop_device ?
當初動機是管理檔案比管理partition容易太多了 而且虛擬機也可用 方便做實驗
而用ramdisk是覺得設成這樣很像cache, 開機後設是可行的 還沒試過用來boot
※ 編輯: czm (1.163.144.75), 07/06/2017 04:46:23
討論串 (同標題文章)
完整討論串 (本文為第 2 之 4 篇):
Linux 近期熱門文章
21
56
PTT數位生活區 即時熱門文章