具有持久性分区的持久性实时驱动器

具有持久性分区的持久性实时驱动器

具有持久性分区的持久性实时驱动器

有些网站描述

  • 新工具
  • 旧工具[新版本]的新功能

可以使用 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-rwwritable这在以下版本中实现: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 splashpersistent。是的,您可以编辑二进制 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 awkman sedinfo '(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

使用 Rufus 制作的持久 USB 重新填充

使用 Rufus 制作的持久性 USB,带有重新填充的 casper-rw 分区

使用 mkusb 制作的持久 USB

使用 mkusb 制作的持久 USB

使用 mkusb 重新填充持久 USB

使用 mkusb 制作的持久性 USB,带有重新填充的 casper-rw 分区

编辑:跟踪持久磁盘空间使用情况。

我查看了 Rufus 的 casper-rw 分区中的磁盘空间使用情况,并制作了 mkusb 刚制作的持久 USB

Rufus var 文件夹

Rufus var 文件夹

Rufus snaps 文件夹的内容

Rufus snaps 文件夹的内容

![mkusb var 文件夹

mkusb var 文件夹

![mkusb snaps 文件夹的内容

mkusb snaps 文件夹的内容

数据尚未确认

编辑:Rufus 3.9.1624

使用最新版本的 Rufus 运行磁盘使用情况分析器,结果接近 Rufus 3.8。看来 mkusb 仍然是一个更节省空间的持久驱动器。

在此处输入图片描述 使用 Rufus 3.9 制作的持久 USB 在此处输入图片描述 Rufus 3.9 var 文件夹

再次,数据和方法尚未得到确认。

相关内容