Linux 板


LINE

本次一樣修改initrd.d/linuxrc 新增可OverlayFS boot 同樣是新增修改這三部份 : part1: 參數讀取 放在參數讀取的那區 : part2: 解析UUID=, LABEL=; mount and losetup. 放在 Determine root device 前 : part3: mount --move 放在switch_root 前 在grub.cfg內的用法,舉例三種: 1. 最初的版本 只用單一loopfile 啟動os linux vmlinuz loops_dev=LABEL=loops loops_mnt=/loops \ loop_file=live.ext4 root=LABEL=live 2. 使用overlay boot, 但lower,upper,work都在同一可寫的目錄下 linux vmlinuz rootfstype=overlay ovl_dev1=LABEL=loops ovl_mnt1=/loops \ ovl_loopfile1=live/live.ext4 ovl_mnt1_sub=/loops/live/lower \ ovl_mnt2_sub=/loops/live root=overlay 3. 使用overlay, lower來源為squashfs, upper與work使用tmpfs linux vmlinuz rootfstype=overlay ovl_dev1=LABEL=cd ovl_mnt1=/loops \ ovl_loopfile1=live.squashfs ovl_mnt1_sub=/lower \ ovl_dev2=tmpfs ovl_mnt2=/rw ovl_mnt2_opt=size=3072m root=overlay 接著預計自製 live-cd... : 以下為與原檔initrd.d/linuxrc[C比較 新增的內容 : ==================================== # zm 1: get parameters for boot from loop file or overlayfs loops_dev=*) LOOPS_DEV=${x#*=} ;; loops_mnt=*) LOOPS_MNT=${x#*=} ;; loop_file=*) LOOP_FILE=${x#*=} ;; ovl_dev1=*) OVL_DEV1=${x#*=} ;; ovl_dev2=*) OVL_DEV2=${x#*=} ;; ovl_mnt1=*) OVL_MNT1=${x#*=} ;; ovl_mnt2=*) OVL_MNT2=${x#*=} ;; ovl_mnt2_opt=*) OVL_MNT2_OPT=${x#*=} ;; ovl_loopfile1=*) OVL_LOOPFILE1=${x#*=} ;; ovl_loopfile2=*) OVL_LOOPFILE2=${x#*=} ;; ovl_mnt1_sub=*) OVL_MNT1_SUB=${x#*=} ;; ovl_mnt2_sub=*) OVL_MNT2_SUB=${x#*=} ;; mount_move) MOUNT_MOVE=1 ;; # zm ------------ # zm 2: find the device which contains loop files, mount and losetup. if [ -n "${LOOPS_DEV}" ]; 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}" ) 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; if [ -n "${LOOP_FILE}" ]; then mkdir -p ${LOOPS_MNT} mount ${MNT_DEV} ${LOOPS_MNT} losetup /dev/loop0 "${LOOPS_MNT}/${LOOP_FILE}" fi fi # zm 2-1: find the devices, loopfiles, dirs for overlay fs. if [ "${ROOTFSTYPE}" = 'overlay' ]; then OVL_MNT_DEV1="" while [ "${OVL_MNT_DEV1}" = '' ] do case "${OVL_DEV1}" in LABEL=*|UUID=*) retval=1 if [ ${retval} -ne 0 ]; then OVL_MNT_DEV1=$(findfs "${OVL_DEV1}" ) retval=$? fi if [ ${retval} -ne 0 ]; then OVL_MNT_DEV1=$(busybox findfs "${OVL_DEV1}" ) # OVL_MNT_DEV1=$(busybox findfs "${OVL_DEV1}" 2>/dev/null) retval=$? fi if [ ${retval} -ne 0 ]; then OVL_MNT_DEV1=$(blkid -o device -l -t "${OVL_DEV1}") retval=$? fi if [ ${retval} -eq 0 ] && [ -n "${OVL_MNT_DEV1}" ]; then good_msg "Detected ovl_dev1=${OVL_MNT_DEV1}" else prompt_user "ovl_dev1" "${OVL_DEV1}" "failed" continue fi ;; esac done; if [ -n "${OVL_MNT_DEV1}" ] && [ -n "${OVL_MNT1}" ]; then mkdir -p ${OVL_MNT1} mount ${OVL_MNT_DEV1} ${OVL_MNT1} if [ "$?" = '0' ]; then OVL_DEV1_MOUNTED=1 else OVL_DEV1_MOUNTED=0 fi fi if [ "${OVL_DEV1_MOUNTED}" = '1' ]; then if [ -n "${OVL_LOOPFILE1}" ]; then if [ -z "${OVL_MNT1_SUB}" ]; then OVL_MNT1_SUB="/lower" fi mkdir -p "${OVL_MNT1_SUB}" losetup /dev/loop0 "${OVL_MNT1}/${OVL_LOOPFILE1}" mount /dev/loop0 "${OVL_MNT1_SUB}" # mount -t squashfs -o loop "${OVL_MNT1}/${OVL_LOOPFILE1}" "${OVL_MNT1_SUB}" LOWER="lowerdir=${OVL_MNT1_SUB}" else if [ -n "${OVL_MNT1_SUB}" ]; then LOWER="lowerdir=${OVL_MNT1_SUB}" else LOWER="lowerdir=${OVL_MNT1}" fi fi got_good_root=1 fi if [ -n "${OVL_DEV2}" ]; then if [ "${OVL_DEV2}" = 'tmpfs' ]; then if [ -z "${OVL_MNT2_OPT}" ]; then OVL_MNT2_OPT='size=3072m' fi mkdir -p "${OVL_MNT2}" mount -t tmpfs -o "${OVL_MNT2_OPT}" tmpfs "${OVL_MNT2}" good_msg "Mounting -t ovl_dev2=${OVL_DEV2} -o ${OVL_MNT2_OPT} tmpfs ${OVL_MNT2}" UPPER="upperdir=${OVL_MNT2}/upper" mkdir -p "${OVL_MNT2}/upper" WORK="workdir=${OVL_MNT2}/work" mkdir -p "${OVL_MNT2}/work" else OVL_MNT_DEV2="" while [ "${OVL_MNT_DEV2}" = '' ] do case "${OVL_DEV2}" in LABEL=*|UUID=*) retval=1 if [ ${retval} -ne 0 ]; then OVL_MNT_DEV2=$(findfs "${OVL_DEV2}" ) retval=$? fi if [ ${retval} -ne 0 ]; then OVL_MNT_DEV2=$(busybox findfs "${OVL_DEV2}" ) retval=$? fi if [ ${retval} -ne 0 ]; then OVL_MNT_DEV2=$(blkid -o device -l -t "${OVL_DEV2}") retval=$? fi if [ ${retval} -eq 0 ] && [ -n "${OVL_MNT_DEV2}" ]; then good_msg "Detected ovl_dev2=${OVL_MNT_DEV2}" else prompt_user "Maybe ovl_dev2 ${OVL_DEV2} failed" continue fi ;; esac done; if [ -n "${OVL_MNT_DEV2}" ] && [ -n "${OVL_MNT2}" ]; then mkdir -p ${OVL_MNT2} mount ${OVL_MNT_DEV2} ${OVL_MNT2} if [ -z "${OVL_LOOPFILE2}" ]; then UPPER="upperdir=${OVL_MNT2}/upper" mkdir -p "${OVL_MNT2}/upper" WORK="workdir=${OVL_MNT2}/work" mkdir -p "${OVL_MNT2}/work" fi fi if [ -n "${OVL_LOOPFILE2}" ]; then if [ -z "${OVL_MNT2_SUB}" ]; then OVL_MNT2_SUB="${OVL_MNT2}/rw" fi mkdir -p "${OVL_MNT2_SUB}" losetup /dev/loop1 "${OVL_MNT2}/${OVL_LOOPFILE2}" mount /dev/loop1 "${OVL_MNT2_SUB}" mkdir -p "${OVL_MNT2_SUB}/upper" mkdir -p "${OVL_MNT2_SUB}/work" UPPER="upperdir=${OVL_MNT2_SUB}/upper" WORK="workdir=${OVL_MNT2_SUB}/work" else if [ -n "${OVL_MNT2_SUB}" ]; then mkdir -p "${OVL_MNT2_SUB}/upper" mkdir -p "${OVL_MNT2_SUB}/work" UPPER="upperdir=${OVL_MNT2_SUB}/upper" WORK="workdir=${OVL_MNT2_SUB}/work" fi fi fi # [ "${OVL_DEV2}" = 'tmpfs' ] else # [ -n "${OVL_DEV2}" ] if [ -n "${OVL_MNT2_SUB}" ]; then mkdir -p "${OVL_MNT2_SUB}/upper" mkdir -p "${OVL_MNT2_SUB}/work" UPPER="upperdir=${OVL_MNT2_SUB}/upper" WORK="workdir=${OVL_MNT2_SUB}/work" else if [ -z "${UPPER}" ]; then UPPER="upperdir=${OVL_MNT1}/upper" mkdir -p "${OVL_MNT1}/upper" fi if [ -z "${WORK}" ]; then WORK="workdir=${OVL_MNT1}/work" mkdir -p "${OVL_MNT1}/work" fi fi fi # [ -n "${OVL_DEV2}" ] good_msg "OverlayFS - lower:${LOWER}, upper:${UPPER}, work:${WORK} ..." REAL_ROOTFLAGS="${LOWER},${UPPER},${WORK}" fi # zm [ "${ROOTFSTYPE}" = 'overlay' ] ------------ # zm 3: move LOOPS_MNT or OVL_MNTs from initramfs to real root if [ "${MOUNT_MOVE}" = '1' ]; then if [ -n "${LOOPS_MNT}" ]; 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 if [ -n "${OVL_MNT1}" ]; then if [ ! -e "${CHROOT}${OVL_MNT1}" ]; then mkdir -p "${CHROOT}${OVL_MNT1}" fi mount --move "${OVL_MNT1}" "${CHROOT}${OVL_MNT1}" good_msg "Remounting loop_dev=${OVL_DEV1} to ${CHROOT}${OVL_MNT1}" fi if [ -n "${OVL_MNT2}" ]; then if [ ! -e "${CHROOT}${OVL_MNT2}" ]; then mkdir -p "${CHROOT}${OVL_MNT2}" fi mount --move "${OVL_MNT2}" "${CHROOT}${OVL_MNT2}" good_msg "Remounting loop_dev=${OVL_DEV2} to ${CHROOT}${OVL_MNT2}" fi fi # zm ------- --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.132.23
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Linux/M.1499903917.A.892.html
1F:推 Bencrie: 最近也在玩類似的東西。我發現把 ext4 image 掛起來 07/16 16:51
2F:→ Bencrie: 沒調過 option 的話效能大概是原生一半左右 07/16 16:52
我是統一把swap放ssd,tmp,/var/tmp放ram 比較 /在ssd partition, /在loop@ssd, /在loop@hd 感覺差異只有開機時慢1~2秒 其他在上網普通時沒啥差別 以前某web上有說-10%左右 剛剛google "loopback file system performance" https://serverfault.com/questions/166748/performance-of-loopback-filesystems 它說只有在sync after every write才會慢到-50% 應該把swap,/tmp,/var/tmp移出去 就可以改善很多了 ※ 編輯: czm (1.163.141.167), 07/24/2017 17:16:40







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP