Re: [心得] 閒聊+雙系統另種選擇 loopdevice

看板Linux作者 (czm)時間8年前 (2017/07/04 07:25), 8年前編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/4 (看更多)
繼上次完全使用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
這是不是就像是LIVECD的做法?
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
文章代碼(AID): #1PMj9KxR (Linux)
文章代碼(AID): #1PMj9KxR (Linux)