Mar*_*020 5 initrd live-usb livecd initramfs overlayfs
我想看看当 LiveUSB Linux 运行时,在 ISO 9660 之上添加了哪些文件。启动时, USB 驱动器上的persistence
upper
文件work
夹清晰可见。我mount
在从 LiveUSB“通常方式”(w/out persistence
)启动的 Linux 上运行,并看到通过和/
挂载。但给出.overlayfs
upperdir=/cow/upper
sudo ls /cow
no such file or directory
在哪里/cow
以及如何查看其内容?
添加1:我能够initrd
通过unmkinitramfs
(参见https://unix.stackexchange.com/a/495524/446998)从liveUSB中提取内容
$ find . -type f -exec bash -c 'cat {} | grep "/cow/upper" && ls -l {}' \;
if [ ! -d /cow/upper ]; then
mkdir -p /cow/upper
/cow/lost+found|/cow/upper|/cow/log|/cow/crash|/cow/install-logs-*) continue ;;
mv "$cow_content" /cow/upper
mount -t overlay -o "upperdir=/cow/upper,lowerdir=$mounts,workdir=/cow/work" "/cow" "$rootmnt" || panic "overlay mount failed"
-rw-r--r-- 1 alex alex 33834 Jun 24 2020 ./main/scripts/casper
Run Code Online (Sandbox Code Playgroud)
我设想的下一步是了解如何/cow
创建,因为在内容中看不到initrd
// 基于 kubuntu 22 lts livecd 的经验
ramdisk (/cdrom/casper/initrd) 的最后一步是
run-init {rootmnt}" "${init}" "$@"
哪个做类似的事情
chroot {rootmnt}" "${init}" "$@"
该步骤之后可能会影响对原始挂载点的观察。
幸运的是,有一些方法可以在 chroot 之前在交互式 shell 中暂停(按 ctrl+d 或退出以继续)
kernel boot cmdline args
break=top,premount,mount,mountroot,bottom,init
可以解决这个问题。
//BTW:manjaro 22
只支持break=premount
(同break=y
) 或break=postmount
, 不支持多个值复合,
另外另一个命令行参数可能会有所帮助
debug
,或者debug=y
在 ramdisk 运行期间打开详细日志
// boot args 可以在 grub 菜单中通过按e
// 这些信息来自读取 ramdisk 脚本来编辑
你已经unmkinitramfs
找到了
scripts/casper
处理 casper-rw 持久性的东西
./脚本/casper
setup_overlay() {
image_directory="$1"
rootmnt="$2"
# Mount up the writable layer, if it is persistent then it may well
# tell us what format we should be using.
mkdir -p /cow
cowdevice="tmpfs"
cow_fstype="tmpfs"
cow_mountopt="rw,noatime,mode=755"
# Looking for "$(root_persistence_label)" device or file
if [ -n "${PERSISTENT}" ]; then
cowprobe=$(find_cow_device "$(root_persistence_label)")
if [ -b "${cowprobe}" ]; then
cowdevice=${cowprobe}
cow_fstype=$(get_fstype "${cowprobe}")
cow_mountopt="rw,noatime"
else
[ "$quiet" != "y" ] && log_warning_msg "Unable to find the persistent medium"
fi
fi
mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} /cow || panic "Can not mount $cowdevice on /cow"
Run Code Online (Sandbox Code Playgroud)
这里的代码确定持久分区,并挂载它
在 ramdisk shell 中,/cow /root 准备好之后
mkdir /root/_cow
mount -o bind /cow /root/_cow
Run Code Online (Sandbox Code Playgroud)
然后chroot进入系统后,/_cow就可以访问原来的外层/cow了
归档时间: |
|
查看次数: |
1143 次 |
最近记录: |