首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >怎样才能更容易地使用Ubuntu19.10进行持久的实时驱动呢?

怎样才能更容易地使用Ubuntu19.10进行持久的实时驱动呢?
EN

Ask Ubuntu用户
提问于 2019-10-18 11:12:42
回答 3查看 23.7K关注 0票数 20

带有持久性

分区的

持久性活动驱动器

有一些网站描述

  • 新工具
  • 旧工具中的新特性

它可以从带有Ubuntu 19.10和相应的Ubuntu家族风味的iso文件中创建一个持久的实时驱动器。

  • 为什么和如何运作?
  • 它与早期的持久性实时驱动器的方法有什么不同?
  • 对克隆驱动器来说,live不是默认的吗?
EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2019-10-18 11:23:36

票数 21
EN

Ask Ubuntu用户

发布于 2021-10-29 16:14:47

我编写了一个bash脚本(一条线),根据@sudodus的答案编辑活动的USB磁盘,将“静音溅”更改为“持久”。

免责声明:它在我的系统上起作用,你可以自己冒险使用。它适用于bash,可能不适用于其他shell的w/out编辑。

在从USB额外分区启动后,writable被创建了w/out,我的干预是为了持久化,如果不是,可以使用fdisk

第一个代码变体是没有效率的,因为它在每次编辑之后都使用grep开始搜索;但是,当进行一些更改时,它可以通过ctrl-c停止。

代码语言:javascript
运行
复制
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只做了一次,但是grep需要经过完整的文件(例如块设备,USB),这需要很长时间才能进行任何编辑(在我的系统中,8Gb驱动器需要15分钟左右,为了满足这种好奇心,我添加了date ):

代码语言:javascript
运行
复制
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=备注:通过读取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中得到解释(“管道可能产生一个子subshell,其中环境是由值而不是引用继承的”),在字符串从一个块开始并在下一个块中结束的情况下,需要使用两个块。这些光盘包括三个安全检查:原始字符串和替换字符串的长度相同,块大小足够大,设备大小不大于20 be (防止主驱动器意外编辑,需要编辑更大的闪存,代码为$((file_size/1024/1024/1024)) -gt 20)。脚本中有一些冗余,例如FS = ":" ; in awk,由于某些原因,字段分隔符没有像我预期的那样工作,我不得不添加--field-separator ":",在grep --perl-regexp中也需要使用十六进制(例如\xaa值),但是这个编辑没有它们。\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

备注:

通过读取D11D12D13D14D15可以理解脚本参数和语法的含义。为什么管道中所需的D16 / D17C18中得到解释(“管道可能产生一个子subshell,其中环境是由值而不是引用继承的”),在字符串从一个块开始并在下一个块中结束的情况下,需要使用两个块。

这些光盘包括三个安全检查:原始字符串和替换字符串的长度相同,块大小足够大,设备大小不大于20 be (防止主驱动器意外编辑,需要编辑更大的闪存,代码为D19)。

脚本中有一些冗余,例如D20 in D21,由于某些原因,字段分隔符没有像我预期的那样工作,我不得不添加D22,在D23 D24中也需要使用十六进制(例如D25值),但是这个编辑没有它们。

票数 4
EN

Ask Ubuntu用户

发布于 2019-10-23 07:22:27

Rufus是使用Ubuntu19.10

进行持久实时驱动的最简单工具

(但不一定是最好的)

对于不限于Ubuntu中4GB的持久驱动器,mkusb是最容易(也是最好的)使用的。(还有什么)?

为了在Windows 10中使一个不限于4GB的持久驱动器,Rufus似乎是目前最容易使用的工具。

不过,这并不意味着它是最好的工具。

我做了一些简单的实验,比较Rufus和mkusb的最新版本:

首先,我删除了一个4GB的USB,然后在Windows 10中运行Rufus,重新启动,并使用磁盘使用分析器查看了/casper-rw/upper/文件夹。

然后我删除了casper分区,并做了一个新的分区。

我重新启动了驱动器几次,没有做任何更改,也没有保存任何内容,并再次查看了使用DUA重新填充的持久性分区。

我再次擦除驱动器,用mkusb创建了另一个持久USB,重新启动,并再次查看了DUA。

我再次删除了casper分区,并创建了一个新的分区。

我重新启动了驱动器几次,没有做任何更改,并再次查看了使用DUA重新填充的持久性分区。

从所附图表中可以看出,mkusb在使用磁盘空间方面似乎更好,而grub 2比syslinux更直接。

用鲁弗斯制作的Persistent USB

用Rufus分区重新填充的Persistent USB

用mkusb制作的Persistent USB

用mkusb制作的<#>Persistent USB与重新填充的casper分区

Edit:跟踪持久磁盘空间的使用情况。

我查看了Rufus和mkusb的casper-rw分区中磁盘空间的使用情况。

Rufus var文件夹

Rufus的Contents快照文件夹

mkusb var文件夹

mkusb的Contents截取文件夹

Data尚未确认

Edit: Rufus3.9.1624

用最新版本的Rufus运行磁盘使用分析器,结果接近Rufus3.8。它认为mkusb仍然能提供更高空间效率的持久驱动。

用Rufus3.9制作的Persistent USB

<#>Rufus 3.9var文件夹

同样,数据和方法尚未得到证实。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1181854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档