具有持久性分区的持久性实时驱动器
有些网站描述
- 新工具
- 旧工具[新版本]的新功能
可以使用 Ubuntu 19.10 和相应的 Ubuntu 系列版本从 iso 文件创建持久实时驱动器。
- 它为何起作用以及它如何起作用?
- 它与早期的持久实时驱动方法有何不同?
- 不是居住克隆驱动器的默认设置是什么?
答案1
具有持久性分区的持久性实时驱动器
是的,有些网站描述了新工具和旧工具[新版本]中的新功能,这些工具和新功能可以使用 Ubuntu 19.10 和相应的 Ubuntu 系列版本从 iso 文件创建持久实时驱动器。
- 新功能或错误修复(‘功能请求’或‘错误修复’根据 此链接) 使得在从 iso 文件的克隆或提取的副本直接启动时,可以使用分区进行持久保存。
这使得使用 Ubuntu 19.10 创建带有持久分区的实时驱动器变得更加容易。
在以前的 Ubuntu 版本中,可以使用 FAT32 文件系统中的文件进行持久化。其大小限制为 4 GiB。可以通过 grub 在单独的分区(与 iso 文件的内容不同)中启动,并使用分区进行持久化。但这更复杂,因此不适合手动方法。
在 19.10 及以后的版本中,持久性分区的大小仅受驱动器大小(USB 闪存盘、SSD、HDD、存储卡)的限制。
Debian 10 live iso 文件也具有此功能,可用于创建带有持久分区的持久实时驱动器。
最新消息:在开发中的 Focal Fossa 中,即将发布为 20.04 LTS,持久性分区的默认标签从 更改为
casper-rw
。writable
这在以下版本中实现:mkusb-plug
版本 2.5.5,(与 PPA 中的 mkusb 版本 12.4.3 捆绑在一起)。
工具
Ubuntu 和 Debian
- 韓國- 适用于所有当前版本的 Ubuntu
如果你跑标准 Ubuntu 直播,您需要额外的指令来获取存储库 Universe。(Kubuntu、Lubuntu ... Xubuntu 已自动激活存储库 Universe。)
sudo add-apt-repository universe # only for standard Ubuntu
sudo add-apt-repository ppa:mkusb/ppa # and press Enter
sudo apt-get update
sudo apt-get install mkusb mkusb-nox usb-pack-efi
- mkusb-minp- 可以在 Ubuntu 19.10 中使用此新功能的小型独立 shell 脚本。它也适用于 Debian 10。
尝试旧版本或重新发行版(基于 Ubuntu 的发行版)时,请阅读警告
- mkusb 插头- 可以在 Ubuntu 19.10 中使用此新功能的一小部分 shell 脚本。它也适用于 Debian 10。我认为使用这个具有图形用户界面的全新且非常安全的工具,您会发现事情变得更容易。
视窗
更新: 鲁弗斯- 一个众所周知的工具,可以在 Ubuntu 19.10 中使用此新功能。请务必使用当前版本(Rufus 3.9 或更高版本),
适用于所有当前 Ubuntu 版本创建仅实时运行的驱动器,
可以创建执着的Ubuntu 19.10 及以后版本不支持 Live Drive。请升级至版本 3.9(或更新版本),它可以创建一个良好的
ext3
文件系统并可以制作良好的持久实时驱动器。请阅读变更日志在网站上,以及警告(弹出窗口),它们可以帮助您避免严重的错误。
编辑: Rufus 3.9 已经发布:-)
简单的方法,在克隆之前编辑 iso 文件
Ubuntu 19.10 中的这个新功能也可以在 Windows 中使用,
使用氢键(二进制编辑器)编辑 iso 文件以便将两个装饰启动选项“quiet splash”替换为“persistent”(将 12 个字符替换为 12 个字符)
使用Win32 磁盘映像程序克隆已编辑的 iso 文件
克隆的驱动器首次启动时,Ubuntu 系统将创建一个具有文件系统
casper-rw
的分区ext4
自动地. 简单而强大!这些链接有详细描述:
MacOS、Windows 和 Linux
- 网启动- 您必须
casper-rw
手动创建一个持久分区并删除或重命名该casper-rw
文件
请参阅此链接描述如何向 UNetbootin 实时/持久 USB(Ubuntu 19.10+)添加持久分区
Please notice 'Space used to preserve files across reboots ...'
[![enter image description here][10]][10]
- 压缩图像文件
您可以根据以下链接直接提取并克隆压缩图像文件,
Xubuntu Core 20.04 LTS 带有 mkusb 12.4.5(mkusb-dus 和 mkusb-plug)
这适用于所有操作系统
- 可以提取压缩文件的工具
xz
- 克隆工具
手动方法
当您运行 Ubuntu 时,只需几个手动步骤即可创建带有持久分区的持久实时驱动器。
编辑 iso 文件以将其替换
quiet splash
为persistent
。是的,您可以编辑二进制 iso 文件并将 12 个字符替换为其他 12 个字符,然后将输出刷新到目标设备(通常是 USB 闪存盘)。sed
可以做到。在编辑的 iso 文件的闪存副本“后面”创建一个分区。
fdisk
可以做到。在这个分区上创建一个
ext2
文件系统,并将标签放在casper-rw
这个分区上。mkfs.ext2
可以做到。刷新缓冲区。
sync
可以做到。
这就是mkusb-minp
正在做的事情,再加上大量的检查,为整个过程披上了一层安全带。换句话说,您可以获得帮助,以便写入正确的目标设备,并在可能出现问题时收到警告。
您可以自己动手,感受每个步骤,也可以阅读 shellscript 的代码mkusb-minp
并了解细节。
请注意,dus
在下面的示例中,我使用并选择了“克隆”。您可以使用其他克隆工具,但如果您使用像这样的简单工具dd
,请
再检查一遍您正在克隆到当前设备,并且该设备上的所有分区都已被卸载。
strings lubuntu-19.10-desktop-amd64.iso |grep 'quiet splash' # check that 'quiet splash' is there to be replaced by 'persistent ' (12 characters)
sed 's/quiet splash/persistent /' lubuntu-19.10-desktop-amd64.iso > persistent-lubuntu-19.10-desktop-amd64.iso # yes, sed works with binary files
ls -l *19.10* # check that the size is the same
strings persistent-lubuntu-19.10-desktop-amd64.iso |grep 'persistent ' # check that 'persistent' is there now
dus persistent-lubuntu-19.10-desktop-amd64.iso # I use mkusb-dus, you can use the Ubuntu Startup Disk Creator or another cloning tool
sudo lsblk -fm # It is important to check the device letter of the target drive (the USB drive, that you want persistent live
sudo fdisk /dev/sdx # x is the device letter of the target drive, please double-check that you have the correct letter
n # new partition
p # primary
<Return> # default: 3
<Return> # default: next free sector
<Return> # default: last addressable sector
w # write and quit
sudo lsblk -fm # check that things look good and verify that partition #3 is the correct partition to be used to store the persistent data
sudo mkfs.ext2 -L casper-rw /dev/sdx3 # put label and file system into the partition of persistence
sudo lsblk -fm # check that things look good
sync # flush the buffers and wait for prompt
链接
有一些通用的手动方法可以通过使用文件坚持分割持久性。请参阅以下链接,
克隆的 Ubuntu 19.10+ 实时驱动器实际上并不是实时的
克隆驱动器的默认设置不是实时吗?
嗯,它曾经是,并且仍然有效,但在 19.10 中不再是仅有的有效版本。
如果你想制作一个纯粹的实时驱动器,在关机和重启后不会保留任何内容,你可以
使用mkusb-minp选择
-n
或者mkusb 插头并选择‘无持久实时驱动器’。或者手动修改内置启动选项,将“quiet splash”替换为“nopersistent”
关联
答案2
bash
根据@sudodus 的回答,我编写了一个脚本(一行)来编辑实时 USB 磁盘,将“quiet splash”更改为“persistent”。
免责声明:它在我的系统上运行良好,使用时请自担风险。它适用于bash
,未经编辑可能无法在其他 shell 上运行。
从 USB 启动后,writable
无需我的干预即可创建额外的分区,用于覆盖持久性,如果不能使用则fdisk
可以使用。
代码的第一个变体效率不高,因为它在每次编辑后都开始全面搜索;但是当进行某些更改时grep
它可以停止。ctrl-c
device_to_edit=/dev/sdb; string_to_edit="quiet splas\x68"; new_string="persistent "; block_size=512; ed_count=0; to_end=""; if [ ! ${#string_to_edit} -eq ${#new_string} ]; then echo -e "\n Suspect a danger as strings lengths not same"; elif [ $block_size -lt ${#new_string} ]; then echo -e "\n\ Suspect a danger as block size too small for string length"; elif file_size=$(lsblk -b --output PATH,SIZE | grep "$device_to_edit " | sed -E 's/.* ([0-9]{1,})/\1/'); [ $((file_size/1024/1024/1024)) -gt 20 ]; then echo -e "\n Suspect a danger as device size is large"; else while [ -z $to_end ]; do offset_to_edit=$(sudo grep --only-matching --byte-offset --max-count=1 --text --perl-regexp "$string_to_edit" $device_to_edit | awk --field-separator ":" '{ FS = "0" ; print $1 ; exit }'); if [ -z "$offset_to_edit" ]; then echo -e "\n end of file is reached" ; to_end="yes" ; else block_to_edit=$(($offset_to_edit/$block_size)) ; sudo dd if=/$device_to_edit count=2 skip=$block_to_edit bs=$block_size | sed "s/$string_to_edit/$new_string/" | sudo dd conv=notrunc of=$device_to_edit count=2 seek=$block_to_edit bs=$block_size; echo "blocks $block_to_edit and next edited (blocks start with 0)"; ((ed_count++)) ; fi ; done ; echo -e "\n$ed_count editions made"; fi
在第二种变体中,代码grep
只执行一次,但要经过完整的文件(例如块设备、USB),这在进行任何编辑之前可能需要花费大量时间(在我的系统上,8Gb 驱动器花费约 15 分钟,出于好奇,grep
我添加了以下内容):date
date; device_to_edit=/dev/sdb; string_to_edit="quiet splash"; new_string="persistent "; block_size=512; ed_count=0; to_end=""; if [ ! ${#string_to_edit} -eq ${#new_string} ]; then echo -e "\n Suspect a danger as strings lengths not same"; elif [ $block_size -lt ${#new_string} ]; then echo -e "\n\ Suspect a danger as block size too small for string length"; elif file_size=$(lsblk -b --output PATH,SIZE | grep "$device_to_edit " | sed -E 's/.* ([0-9]{1,})/\1/'); [ $((file_size/1024/1024/1024)) -gt 20 ]; then echo -e "\n Suspect a danger as device size is large"; else sudo grep --only-matching --byte-offset --text --perl-regexp "$string_to_edit" $device_to_edit | awk --field-separator ":" '{ FS = ":" ; print $1 }' | { IFS=$'\n' read -d '' -a offsets_to_edit ; for offset in ${offsets_to_edit[@]}; do block_to_edit=$(($offset/$block_size)) ; sudo dd if=/$device_to_edit count=2 skip=$block_to_edit bs=$block_size | sed "s/$string_to_edit/$new_string/" | sudo dd conv=notrunc of=$device_to_edit count=2 seek=$block_to_edit bs=$block_size; echo "blocks $block_to_edit and next edited (blocks start with 0)"; ((ed_count++)); done; echo -e "\n$ed_count editions made"; } ; fi; date
笔记:
man bash
通过阅读、man awk
、man sed
、info '(coreutils) dd invocation'
、可以理解脚本参数和语法的含义help read
。为什么管道中需要(list)
/ 的{ list; }
解释见https://stackoverflow.com/questions/2746553/read-values-into-a-shell-variable-from-a-pipe(“管道可能会产生一个子 shell,其中的环境是通过值继承的,而不是通过引用继承的”),如果字符串在一个块中开始并在下一个块中结束,则需要使用两个块。
该脚本包括三项安全检查:原始字符串和替换字符串的长度相同、块大小足够大、设备大小不大于 20Gb(防止意外编辑主驱动器,需要编辑更大的闪存,代码为$((file_size/1024/1024/1024)) -gt 20
)。
脚本中存在一些冗余,例如FS = ":" ;
,awk
由于某种原因,字段分隔符没有按我预期的方式工作,因此我不得不添加--field-separator ":"
,也grep
--perl-regexp
需要在中使用十六进制例如\xaa
值,但此编辑没有它们。
答案3
Rufus 是使用 Ubuntu 19.10 制作持久实时驱动器的最简单的工具
(但不一定是最好的)。
为了在 Ubuntu 中制作不限于 4GB 的持久驱动器,mkusb 是最简单(也是最好用的)的。(还有什么)?
为了在 Windows 10 中制作不限于 4GB 的持久驱动器,Rufus 似乎是目前最容易使用的工具。
但这并不意味着它就是最好的工具。
我做了一些简单的实验,比较了最新版本的 Rufus 和 mkusb:
首先,我擦除了 4GB USB,然后在 Windows 10 中运行 Rufus,重新启动,并使用磁盘使用情况分析器查看了 /casper-rw/upper/ 文件夹。
然后我删除了 casper-rw 分区并创建了一个新的分区。
我重新启动了驱动器几次,没有做任何更改或保存任何内容,然后再次使用 DUA 查看了重新填充的持久分区。
我再次擦除了驱动器并使用 mkusb 创建了另一个持久 USB,重新启动并使用 DUA 再次查看。
我再次删除了 casper-rw 分区并创建了一个新分区。
我重新启动了驱动器几次,没有做任何更改,然后再次使用 DUA 查看了重新填充的持久分区。
从附图可以看出,mkusb 在磁盘空间的使用方面似乎更胜一筹,而 grub 2 比 syslinux 更加直接。
使用 Rufus 制作的持久 USB
使用 Rufus 制作的持久性 USB,带有重新填充的 casper-rw 分区
使用 mkusb 制作的持久 USB
使用 mkusb 制作的持久性 USB,带有重新填充的 casper-rw 分区
编辑:跟踪持久磁盘空间使用情况。
我查看了 Rufus 的 casper-rw 分区中的磁盘空间使用情况,并制作了 mkusb 刚制作的持久 USB
Rufus var 文件夹
Rufus snaps 文件夹的内容
mkusb var 文件夹
mkusb snaps 文件夹的内容
数据尚未确认
编辑:Rufus 3.9.1624
使用最新版本的 Rufus 运行磁盘使用情况分析器,结果接近 Rufus 3.8。看来 mkusb 仍然是一个更节省空间的持久驱动器。
使用 Rufus 3.9 制作的持久 USB Rufus 3.9 var 文件夹
再次,数据和方法尚未得到确认。