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/cn.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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP