<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Soul Of Free Loop &#187; squashfs</title>
	<atom:link href="https://zohead.com/archives/tag/squashfs/feed" rel="self" type="application/rss+xml" />
	<link>https://zohead.com</link>
	<description>Uranus Zhou&#039;s Blog</description>
	<lastBuildDate>Sat, 19 Jul 2025 15:42:46 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8</generator>
	<item>
		<title>Linux下直接修改LiveCD系统</title>
		<link>https://zohead.com/archives/livecd-mod-linux/</link>
		<comments>https://zohead.com/archives/livecd-mod-linux/#comments</comments>
		<pubDate>Wed, 23 Apr 2014 15:04:58 +0000</pubDate>
		<dc:creator><![CDATA[Uranus Zhou]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Device mapper]]></category>
		<category><![CDATA[DM]]></category>
		<category><![CDATA[LiveCD]]></category>
		<category><![CDATA[loop]]></category>
		<category><![CDATA[overlay]]></category>
		<category><![CDATA[squashfs]]></category>
		<category><![CDATA[快照]]></category>

		<guid isPermaLink="false">http://zohead.com/?p=706</guid>
		<description><![CDATA[本文同步自（最佳显示效果请点击）：https://zohead.com/archives/livecd-mod-linux/ 最近需要使用一个 LiveCD Linux 系统时发现原来的 root 密码忘了，无法进入系统，因此想到在另外一个 Linux 系统直接修改 LiveCD 系统里的 root 密码。 经过分析下 LiveCD 里 squashfs 文件系统的处理脚本中的流程，下面以 在 CentOS 6.1 Linux 系统中修改 RHEL 6.3 64位 USB LiveCD 为例介绍实际流程。 1、首先挂载 LiveCD 设备分区（假设为 sdb1 设备）： 然后查看 /mnt 挂 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>本文同步自（最佳显示效果请点击）：<a href="https://zohead.com/archives/livecd-mod-linux/" target="_blank">https://zohead.com/archives/livecd-mod-linux/</a></p>
<p>最近需要使用一个 LiveCD Linux 系统时发现原来的 root 密码忘了，无法进入系统，因此想到在另外一个 Linux 系统直接修改 LiveCD 系统里的 root 密码。</p>
<p>经过分析下 LiveCD 里 squashfs 文件系统的处理脚本中的流程，下面以 在 CentOS 6.1 Linux 系统中修改 RHEL 6.3 64位 USB LiveCD 为例介绍实际流程。</p>
<p>1、首先挂载 LiveCD 设备分区（假设为 sdb1 设备）：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# mount /dev/sdb1 /mnt
[root@localhost /]# ls /mnt/LiveOS/
livecd-iso-to-disk      osmin.img               overlay-LIVE-B2C5-F047  squashfs.img
</pre>
<p>然后查看 /mnt 挂载路径下的文件，可以在 /mnt/LiveOS 下看到 squashfs.img 这个只读的 image 这个就是初始的 Linux 文件系统。</p>
<p>2、挂载初始 image 映像：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# mount -t squashfs -o ro,loop /mnt/LiveOS/squashfs.img /media
[root@localhost /]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/sdb1 on /mnt type vfat (rw)
/mnt/LiveOS/squashfs.img on /media type squashfs (ro,loop=/dev/loop0)
[root@localhost /]# ls /media/LiveOS
ext3fs.img
</pre>
<p>这里将初始 image 映像挂载到 /media 路径下，需要注意的是新的 LiveCD 系统使用的基本都是最新的 squashfs 4.0 版本的映像，如果 Linux kernel 版本比较老的话可能无法正常挂载。</p>
<p>/media/LiveOS/ext3fs.img 就是映像中的 ext3 文件系统，如果想确认其中的内容，也可以手工挂载查看：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# mount -t ext3 -o ro,loop /media/LiveOS/ext3fs.img /misc
[root@localhost /]# ls /misc
bin  boot  dev  etc  home  lib  lib64  media  misc  mnt  net  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[root@localhost /]# umount /misc
</pre>
<p>这里我们先不直接挂载 ext3 映像，而是使用下面快照的方式生成可读写的设备。</p>
<p>3、生成 ext3 文件系统的 loop 设备：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# losetup -f /media/LiveOS/ext3fs.img
[root@localhost /]# losetup -a
/dev/loop0: [0811]:124 (/mnt/LiveOS/squashfs.img)
/dev/loop1: [0700]:3 (/media/LiveOS/ext3fs.img)
</pre>
<p>完成之后使用 losetup -a 命令可以看到当前系统中所有的 loop 设备，初始 image 映像对应的 loop 设备为：/dev/loop0，ext3 loop 设备即为：/dev/loop1。</p>
<p>接着查看 LiveCD 设备分区中的 overlay 可读写快照文件：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# ls /mnt/LiveOS/overlay*
/mnt/LiveOS/overlay-LIVE-B2C5-F047
</pre>
<p>可以看到当前的 overlay 快照文件名为：overlay-LIVE-B2C5-F047（每个 LiveCD 系统的 overlay 文件名可能都不同），下面就可以生成 overlay loop 设备了：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# losetup -f /mnt/LiveOS/overlay-LIVE-B2C5-F047
[root@localhost /]# losetup -a
/dev/loop0: [0811]:124 (/mnt/LiveOS/squashfs.img)
/dev/loop1: [0700]:3 (/media/LiveOS/ext3fs.img)
/dev/loop2: [0811]:125 (/mnt/LiveOS/overlay-LIVE-B2C5-F047)
</pre>
<p>使用 losetup -a 命令可以看到 overlay loop 设备为：/dev/loop2。</p>
<p>4、生成快照 DM 设备：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# echo 0 `blockdev --getsz /dev/loop1` snapshot /dev/loop1 /dev/loop2 p 8 | dmsetup create live-rw
[root@localhost /]# dmsetup ls
VolGroup00-LogVol01     (253, 1)
live-rw (253, 2)
VolGroup00-LogVol00     (253, 0)
</pre>
<p>生成 DM 设备就需要用到上面生成的两个 loop 设备了，这里使用了 snapshot device mapper target 生成一个快照设备，/dev/loop1 表示源设备，/dev/loop2 表示存放差异数据的设备。</p>
<p>最终生成的 /dev/mapper/live-rw DM 设备就是我们最终需要的设备了，可以使用 dmsetup 命令查询到。</p>
<p>5、使用 DM 设备：</p>
<p>到这一步就可以直接挂载 DM 设备进行各种修改操作了：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# mount /dev/mapper/live-rw /misc
[root@localhost /]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/sdb1 on /mnt type vfat (rw)
/mnt/LiveOS/squashfs.img on /media type squashfs (ro,loop=/dev/loop0)
/dev/mapper/live-rw on /misc type ext4 (rw)
[root@localhost /]# ls /misc
bin  boot  dev  etc  home  lib  lib64  lost+found  media  misc  mnt  net  opt  p  proc  root  sbin  selinux  srv  sys  tmp  usr  var
</pre>
<p>修改完成之后不能忘记依次的释放操作：</p>
<pre class="brush: bash; title: ; notranslate">
[root@localhost /]# umount /misc
[root@localhost /]# dmsetup remove live-rw
[root@localhost /]# losetup -d /dev/loop2
[root@localhost /]# losetup -d /dev/loop1
[root@localhost /]# umount -d /media
[root@localhost /]# umount /mnt
</pre>
<p>上面几步依次为卸载挂载路径及释放 loop 设备的操作，最后重启回到修改之后的 LiveCD 系统就可以看到修改生效了。</p>
]]></content:encoded>
			<wfw:commentRss>https://zohead.com/archives/livecd-mod-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
