带有持久性分区的持续在线驱动器
有一些网站在描述:
- 新工具
- 旧工具的新功能(新版本中)
可以使用Ubuntu 19.10的ISO文件以及相应的Ubuntu家族风味创建一个持久性在线驱动器。
- 为什么会起作用,以及如何起作用?
- 与先前的持续在线驱动器方法有何不同?
- 克隆驱动器的默认设置不是“在线”吗?
有一些网站在描述:
可以使用Ubuntu 19.10的ISO文件以及相应的Ubuntu家族风味创建一个持久性在线驱动器。
是的,有一些网站描述了可以使用Ubuntu 19.10的iso文件和相应的Ubuntu家族版本创建具有持久性分区的持久化实时驱动器的新工具和功能。
这样可以更轻松地创建具有持久性分区的Ubuntu 19.10的实时驱动器。
在之前的Ubuntu版本中,可以使用FAT32文件系统中的文件进行持久化。其大小限制为4 GiB。可以通过grub在单独的分区(从iso文件的内容中)引导并使用一个分区进行持久化。但这样更加复杂,不适合手动方法。如果您运行标准的Ubuntu Live,您需要额外的指令来获取宇宙软件源。(Kubuntu,Lubuntu ... Xubuntu会自动激活宇宙软件源。)
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
请注意,在尝试旧版本或重新制作(基于 Ubuntu 的发行版)时,请阅读警告信息。
3.9版本
(或更高版本),它可以创建一个良好的ext3
文件系统并制作出良好的持久化启动驱动器。使用HxD(一个二进制编辑器)来编辑ISO文件,以便将两个外观选项'quiet splash'替换为'persistent'(用12个字符替换12个字符)
使用Win32 Disk Imager来克隆编辑后的ISO文件
第一次启动克隆的驱动器时,Ubuntu系统将自动创建一个带有ext4
文件系统的casper-rw
分区。简单而稳定!
这些链接中有详细的描述:
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 with 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
所做的事情,还有很多检查,以确保整个过程安全可靠。换句话说,您将获得帮助以将数据正确写入目标设备,并在可能存在问题时收到警告。
mkusb-minp
的代码并理解细节。dus
并选择'Cloning'。你也可以使用其他克隆工具,但如果你使用像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
有一般的手动方法可以轻松地从使用文件进行持久化修改为使用分区进行持久化。请参阅以下链接:
克隆的驱动器默认不是实时使用吗?
嗯,以前是这样的,但在19.10版本中它仍然是实时使用的,但不再是仅限于实时使用。
如果您想要创建一个纯粹的仅限于实时使用的驱动器,在关机和重启后不会保留任何内容,您可以:
使用mkusb-minp选项-n
或mkusb-plug并选择“无持久化实时驱动器”。
或手动修改内置的引导选项,将“quiet splash”替换为“nopersistent”
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
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
FS = ":";
,由于某种原因字段分隔符没有按照我预期的方式工作,所以我不得不添加--field-separator ":"
。另外,在grep中需要使用--perl-regexp
来使用十六进制值,例如\xaa
,但是这个编辑中并没有这些值。sed
一行命令做到了这一点,也许你可以用 awk 来缩短它。参见此链接:sed 's/quiet splash/persistent /' eoan-desktop-amd64.iso > persistent-eoan-desktop-amd64.iso # 12 char
- sudodus使用Rufus制作的持久化USB
使用Rufus制作的持久化USB,带有重新填充的casper-rw分区。 使用mkusb制作的持久化USB 用mkusb和Repopulated casper-rw分区制作的持久USB。Rufus变成折叠式的
Rufus快照文件夹的内容mkusb var文件夹
mkusb快照文件夹的内容
数据尚未确认
编辑:Rufus 3.9.1624
使用最新版本的Rufus运行磁盘使用分析器,结果接近于Rufus 3.8。看起来mkusb仍然可以制作更节省空间的持久化驱动。
Rufus 3.9制作的持久化USB
Rufus 3.9 var文件夹
再次强调,数据和方法尚未确认。
ext2fs_r_blocks_count_set()
),因此我认为,如果mkusb采用更少的保留块,那么当驱动器填满时,您将缺少索引节点来创建新文件,尽管从长远来看,它可能看起来像mkusb更好地利用了空间...值得一提的是,Rufus使用mke2fs.conf的默认值。 - Akeoe2fsck -f
修复后,该驱动器几乎与由mkusb制作的新驱动器一样好。因此,文件系统存在真正的问题。请再仔细查看一下。 - sudoduse2fsck -f
仍然检测到错误;2. 然后我再次将Rufus下载到我的普通Windows 10上。现在它也在这台电脑和系统中运行良好,且没有明显的存储空间损失(但e2fsck -f
仍然检测到错误)。你是否上传了修复bug的Rufus文件,或者可能是我之前的下载失败了?请发布当前Rufus文件的md5sum。 - sudoduse2fsck -f
发现的错误将是很好的。它可能会在持久性的实时系统的寿命中引发各种问题。 - sudodus
mkusb-minp
,也许我应该减少截图或删除带有整个对话框的代码列表。 - sudodus