如何制作Ubuntu 16.04的持久化Live USB?

我需要一个持久的Ubuntu系统,最好是16.04版本,因为我需要拯救我的整个加密硬盘,该硬盘使用16.04版本,正如在How do I add myself back in sudo group in Encrypted HDD of 16.04?中的讨论所说。我在这里创建了一个新的持久化Live Ubuntu 16.04,但末尾有一些Videonauth描述的错误。
  1. sudo apt-get install gksu debootstrap
  2. gksudo gparted。制作一个带有ext4格式的USB,只留下1GB作为空闲内存,并将1GB设置为Linux Swap;管理标志>仅选择boot
  3. 通过以下步骤准备操作系统并运行在USB驱动器上:

    sudo mkdir /mnt/stick
    sudo mount /dev/sdb1 /mnt/stick/
    sudo debootstrap --arch=amd64 xenial /mnt/stick http://de.archive.ubuntu.com/ubuntu/
    sudo mount -o bind /dev /mnt/stick/dev
    sudo mount -o bind /dev/pts /mnt/stick/dev/pts
    sudo mount -t sysfs /sys /mnt/stick/sys
    sudo mount -t proc /proc /mnt/stick/proc
    sudo cp /proc/mounts /mnt/stick/etc/mtab
    sudo cp /etc/resolv.conf /mnt/stick/etc/resolv.conf
    sudo chroot /mnt/stick/
    
  4. 提示看起来像是root@masi-CM6340:/#。设置区域设置。

    %locale-gen en_US en_US.UTF-8
    %dpkg-reconfigure locale
    dpkg-rekonfigure locales %上述两个命令会引起gnome-terminal出现错误;在此处选择您的区域设置并设置环境为en_US.UTF-8
    dpkg-reconfigure keyboard-configuration
    localedef -i en_US -c -f UTF-8 en_US.UTF-8
    
  5. apt-get install linux-image-generic。您会看到/dev/sda [NotThisOne,您的硬盘驱动器],2 /dev/sdb (31474 MB; ???) 2b - /dev/sdb1 (30398 MB; /)。选择/dev/sdb1/dev/sdb。在此处选择您喜欢的Linux内核。我保留了最稳定的Linux内核4.6,您可以按照本文末尾所述进行下载。

  6. apt-get install vim wget

  7. blkid,复制到剪贴板,vim /etc/fstab。删除sda行,只保留两个sdb行。将它们编辑为如下形式:UUID="..." swap swap defaulst 0 0UUID="..." / ext4 defaults 0 1

  8. 将以下内容粘贴到文件/etc/apt/sources.list中:

    #deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
    
    # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
    # newer versions of the distribution.
    deb http://de.archive.ubuntu.com/ubuntu/ xenial main restricted
    # deb-src http://de.archive.ubuntu.com/ubuntu/ xenial main restricted
    
    ## Major bug fix updates produced after the final release of the
    ## distribution.
    deb http://de.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
    # deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
    
    ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
    ## team, and may not be under a free licence. Please satisfy yourself as to
    ## your rights to use the software. Also, please note that software in
    ## universe WILL NOT receive any review or updates from the Ubuntu security
    ## team.
    deb http://de.archive.ubuntu.com/ubuntu/ xenial universe
    # deb-src http://de.archive.ubuntu.com/ubuntu/ xenial universe
    deb http://de.archive.ubuntu.com/ubuntu/ xenial-updates universe
    # deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates universe
    
    ## N.B. software from this repository is ENTIRE
    
    测试您的持久化安装Ubuntu 16.04 [alpha]
    
    
    1. 开始您的新持久化Ubuntu。在终端中执行sudo true命令。如果出现无法解析主机 * 连接被拒绝的错误,请执行以下操作:

      # https://askubuntu.com/q/59458/25388
      sudo vim /etc/hostname
      masi 
      
      sudo vim /etc/hosts 
      127.0.0.1    localhost.localdomain masi
      [...]
      
    2. 可能出现的问题:Ubuntu启动时显示$(inittramfs)$。请执行以下操作...

    结果:USB启动Ubuntu桌面GUI和UI
    - 您可以打开LibreOffice,Firefox等。 - `masi`在sudo组中;组正确。 - 在chroot到存储设备时,区域设置正确。 - 如果您在GUI中打开gnome-terminal时遇到错误,请在TTY1中再次运行`sudo dpkg-reconfigure locales`。这将解决问题。
    报告给Videonauth的错误:
    始终在测试过程中更新系统:`sudo apt-get update && sudo apt-get upgrade`。
    1. Ubuntu的互联网浏览器。启动它会导致系统崩溃。鼠标仍然可以工作,但无法发送信号到TTY。
    2. Firefox。启动它会出现关于[profile exists]的警告,因此无法打开。临时解决方法rm -r ~/.mozilla && rm -r ./.cache/mozilla只适用于一个会话。该问题在每次登录时都存在。更好的解决方法:sudo mv -v /home/masi /home/masi_backupsudo mkdir -v /home/masisudo chown masi:masi /home/masisudo chmod 755 /home/masisudo reboot,因为某些家庭文件夹的所有权会导致错误。运行source的命令,您将获得以下差异
    3. /etc/hostname在一段时间后无法匹配/etc/hosts
    4. 有时,启动到(inittramsfs)

    运行命令:vimdiff <(find /home/masi -printf "%P %u:%g %m\n" | sort) <(find /home/masi_backup -printf "%P %u:%g %m\n" | sort)

    %LHS-file
    .bash_history masi:masi 600
    .cache/compizconfig-1/animation.pb masi:masi 664
    .cache/compizconfig-1/commands.pb masi:masi 664
    .cache/compizconfig-1/compiztoolbox.pb masi:masi 664
    % here many files not existing in the RHS
    
    %RHS-file (fresh installation)
    .bash_history root:root 600
    .bash_logout masi:masi 664
    .bashrc masi:masi 644
    .cache root:root 700
    

    我不明白是什么原因导致了这个bug。

    升级到Linux内核4.6

    按照这里的指示进行操作。Linux内核4.4存在一个普遍的暂停/恢复bug。升级到4.6版本可以解决该问题并改善系统性能。

    系统版本:14.04,16.04
    Linux内核版本:4.4 - 4.6


2你试过“启动盘创建器”吗?这是一个图形界面应用程序,可以使用标准的liveCD ISO文件来完成这个任务。或者你也可以尝试UNetBootin,它可以制作各种类型的live USB盘,甚至不需要先下载ISO文件(但可能还没有16.04版本)。 - Marty Fried
1@Masi 只需删除当前Ubuntu USB闪存上的所有数据,然后按照创建新的持久化Ubuntu USB闪存的说明进行操作即可。如果您可以访问Ubuntu ISO文件(或者可以下载一个),那将比尝试将现有的USB闪存“转换”为持久化模式要容易得多。 - user533208
1你不能把U盘上的所有内容都删除,然后使用Unetbootin或Startup Disk Creator来创建一个“新的”持久化Live USB吗?这比那些命令要简单得多。 - user533208
这听起来像是一个完整的安装,只是恰好在一个USB上,而不是一个“live USB”... - Xen2050
@Xen2050 是和不是。这是一个完整的安装。Live USB 是一种允许您在不将其安装到驱动器上的情况下测试操作系统的东西。这个 Live USB 允许您在不将其安装到驱动器上的情况下进行测试,但也可以在 USB 上使用它。因此,它是一个持久的 Live USB。 - Léo Léopold Hertz 준영
@masi 你可以删除第14点。我已经在我的回答中添加了如何做到这一点 :) - Videonauth
@Masi 这有点扩大了通常使用的定义,请参见维基百科上的Live USB,并与完整安装部分进行对比。Live USB通常使用casper-rw文件或分区来存储更改,我本来期望在这里看到如何加密casper-rw,但是很遗憾没有。 - Xen2050
1我的理解是,在Ubuntu中,Live USB与Live CD是一样的,你可以运行但不能保存。Persistent USB是一个带有持久文件或分区的Live USB,允许保存会话。完全安装是使用与安装到内部硬盘相同的方法安装到USB上。 - C.S.Cameron
从16.04开始,启动盘创建器不再制作持久化USB。 - C.S.Cameron
抱歉,但通用USB安装程序完美运行。 - Felino Audi
请解释一下你所说的“完美”是什么意思。请具体说明你所处的环境。请解释一下你对持久环境的定义。 - Léo Léopold Hertz 준영
太完美了,因为速度更快+ 4 Gb的casper-rw。 - Felino Audi
请定义您的环境。您的“persistent”是什么?您是否阅读了正文内容? - Léo Léopold Hertz 준영
3个回答

要在USB或外部硬盘驱动器上完成一个完整的Ubuntu安装,您可以按照我在这里描述的步骤进行操作。
首先,您需要进行一些准备安装。您需要安装“gksudo”,它包含在“gksu”软件包中,还需要安装“schroot”和“debootstrap”。这些软件包不是默认安装的,所以请在终端中输入以下命令(ctrl+alt+t):
sudo apt-get install gksu debootstrap schroot

现在你可以开始准备你的USB/HDD进行安装,方法如下:
gksudo gparted

首先,您需要进入“设备”菜单并选择“创建分区表”,当要求选择类型时,请选择“msdos”。现在,您应该看到一个未分配空间的条目。点击此条目,选择新建,并将其设置为ext4,只留下1GB作为可用内存,然后再次点击未分配空间条目,并将其设置为1GB以供Linux Swap使用。完成后,将设置应用于USB/HDD。然后右键点击ext4条目,选择“管理标志”,在那里勾选“引导”复选框,然后保存。
现在,您需要通过逐个执行以下命令来准备您的chroot环境:
sudo mkdir /mnt/stick
sudo mount /dev/sdb1 /mnt/stick/
sudo debootstrap --arch=amd64 xenial /mnt/stick http://archive.ubuntu.com/ubuntu/
sudo mount -o bind /dev /mnt/stick/dev
sudo mount -o bind /dev/pts /mnt/stick/dev/pts
sudo mount -t sysfs /sys /mnt/stick/sys
sudo mount -t proc /proc /mnt/stick/proc
sudo cp /proc/mounts /mnt/stick/etc/mtab
sudo cp /etc/resolv.conf /mnt/stick/etc/resolv.conf
sudo chroot /mnt/stick/

您的提示现在应该是这样的:
root@HOSTNAME:/#

现在您可以开始真正的安装过程,首先设置locale设置和keyboard-configuration,然后安装内核。
locale-gen en_US.UTF-8
dpkg-reconfigure locale
dpkg-reconfigure keyboard-configuration
localedef -i en_US -c -f UTF-8 en_US.UTF-8

apt-get install linux-image-generic

在安装GRUB时,它会要求您选择要安装到哪个设备上。您将看到类似如下的选项:
[ ]/dev/sda [NotThisOne, this is your HDD]
[ ]/dev/sdb (31474 MB; ???)
[ ]/dev/sdb1 (30398 MB; /)

选择/dev/sdb1/dev/sdb,使用箭头键移动到相应字段,按下空格,最后按回车键。完成安装后,您可以安装您选择的编辑器,例如我在这里使用nanovim作为示例。
apt-get install nano vim

现在你可以编辑你的/etc/fstab文件,首先通过以下方法获取你系统中UUID的列表:
blkid

这应该给你一个像这样的输出:
/dev/sda1: UUID="8f8f130f-e127-43b6-b797-8bfa3f1e1631" TYPE="ext4" PARTUUID="06bd4abe-01"
/dev/sda5: UUID="8469c58b-b2bb-4551-b47d-c1a7d21e9ebd" TYPE="swap" PARTUUID="06bd4abe-05"
/dev/sdb1: UUID="b08ab271-5619-479c-aa21-8aea7f4e6f3b" TYPE="ext4" PARTUUID="5872a1f8-01"
/dev/sdb2: UUID="c3309cee-731e-4030-93b9-f1d88c12c806" TYPE="swap" PARTUUID="5872a1f8-02"

为了更方便地编辑,您可以通过用鼠标选择终端输出并按下ctrl+shift+c来复制它,然后通过键入命令打开您选择的编辑器(这里以nano为例):
nano /etc/fstab

你可以在清空文件内容后,按下ctrl+shift+c将这些行粘贴进去。现在删除标有/dev/sda的行,这很可能是你的硬盘驱动器,并将其他两行调整为最终如下所示的样子:
UUID=18055918-6045-42e9-9492-66e3fd29c199 swap swap defaults 0 0
UUID=69b5fb9c-774d-4d35-82f2-6a17faa446a1 / ext4 defaults 0 1

然后按ctrl+x结束编辑,选择y保存并按enter

接下来您需要填写您的/etc/apt/sources.list,您可以通过将以下代码块复制并粘贴到终端中,然后按一次enter来完成。

cat > /etc/apt/sources.list << "EOF"
deb http://archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ xenial universe
deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse
EOF

关于最终配置,必须安装一些需要通过Upstart启动服务的软件包,这些软件包在chroot环境中必须暂时禁用:
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

现在运行更新,然后你可以安装ubuntu-server或者ubuntu-desktop,甚至两者都可以,只要你先安装服务器版本再安装桌面版本。
apt-get update
# Comment this out if ubuntu-desktop is not wanted
apt-get install ubuntu-desktop 
# remove comment if ubuntu-server is wanted
# apt-get install ubuntu-server

最后,添加您的用户并将其放入适当的组中。
adduser --home /home/<username> <username>

usermod -aG adm,cdrom,sudo,dip,plugdev,lpadmin,sambashare <username>

如果出现错误,您可以省略sambashare。通过以下方式检查组设置是否正确:
less /etc/group

你应该在上面的usermod命令和条目中看到每个组列出的类似这样的内容(例如sudo):
sudo:x:27:<username>

如果不是逐个使用上述usermod命令添加组,现在可能是安装驱动程序和实用工具的时候了。我在这里只列出一些对您有用的必要项目。
apt-get ecryptfs-utils testdisk schroot

为了让GRUB只将您的U盘识别为操作系统,而不添加您构建U盘的系统,请执行以下操作:
echo 'GRUB_DISABLE_OS_PROBER="true"' >> /etc/default/grub
update-grub

完成安装的最后步骤是:
rm /sbin/initctl
dpkg-divert --local --rename --remove /sbin/initctl

现在你可以重新启动到你的USB上,并拥有一个完全安装好的Ubuntu系统来使用。如果你遇到无法启动终端的问题,似乎与gnome-terminal中的一个bug有关,你可以在TTY中检查(ctrl+alt+f1并用你的用户名和密码登录)/var/log/syslog的内容,看看是否包含如下行:
May 7 22:30:00 NEXUS-TWO org.gnome.Terminal[1432]: Non UTF-8 locale (ISO-8859-1) is not supported!

要解决这个问题,似乎只需要在TTY中执行sudo dpkg-reconfigure locales命令,并明确选择UTF-8编码。或者在图形界面的设置中设置语言等。之后重新启动即可。

这个和自动安装程序(ubiquity?)做的事情很不一样吗?我不确定OP是否正确使用了“live”这个术语... - Xen2050
我还不知道“普及性”,这个答案是在与原帖作者进行了漫长的聊天对话后得出的结果。 - Videonauth
默认的Ubuntu安装程序,我认为仍然是Ubuquity。 - Xen2050
1应该可以工作 - Videonauth
@Videonauth 请看正文。发现了一些新的案例。/etc/hostname/etc/hosts应该如何设置?- - 在我的系统中经过一段时间后开始出现故障,现在在(inittramfs)中。 - Léo Léopold Hertz 준영
/etc/hostname/etc/hosts 可以从设置中进行配置,它们绝对不会导致您引导到 initramfs。 - Videonauth

这里有一些细节。(其他人应该写一篇更独立的关于优缺点的评论。)
克隆:dd 是一个非常强大但也非常危险的工具,通常被称为“磁盘销毁器”或“数据销毁器”。dd 用于将 iso 文件克隆到 USB 闪存驱动器中。创建仅限实时的 USB 启动驱动器时,“mkusb”会“在 dd 周围包裹安全带”。该方法适用于所有混合 iso 文件,大多数现代 Linux 发行版都提供这种类型的 iso 文件。新版的 16.04 LTS Ubuntu 启动盘创建器也使用克隆方法。
许多其他工具可以将 iso 文件的内容提取到 FAT32 分区中,例如 Rufus 和 Unetbootin(Rufus 还有一种克隆 dd 模式)。
“mkusb”是一个 Linux 工具。它不适用于 Windows。
准备:
sudo add-apt-repository ppa:mkusb/ppa sudo apt update 安装 mkusb:
sudo apt install mkusb
“mkusb”是一个 Bash 脚本,它使用多个标准工具,在大多数 Linux 发行版中可用。当可用时,“mkusb”使用“zenity”进行图形用户界面。
“mkusb-nox”(无 X)以文本模式工作,例如在 Ubuntu Server 中。“mkusb-dus”(实际上是“dus”)也可以在文本模式下使用,带有 dialog 文本模式菜单或纯文本界面。在纯文本模式系统中(例如 Ubuntu Server),您应该安装“dus”和/或“mkusb-nox”软件包,而不是整个“mkusb”软件包,
sudo apt install dus mkusb-nox
其他一些工具由编译代码组成。
“mkusb”可以为 Debian 和 Ubuntu 创建持久的实时系统。这些系统通过 grub2 引导,并将 iso 文件克隆到单独的分区中。会创建一个 casper-rw 分区用于持久性,以及一个 usbdata 分区用于存储数据并与运行 Windows 的计算机共享数据。这些持久的实时系统可以在 UEFI 和 BIOS 模式下启动。
“mkusb-nox”和“mkusb-dus”可以通过提取创建 Windows 7-11 的 USB 安装程序。它使用 grub-pc 软件包安装 grub2,这使得 USB 闪存驱动器以 BIOS 模式启动。此系统可在 UEFI 和 BIOS 模式下启动。
“mkusb”不会创建多引导 USB 驱动器。有其他工具用于此目的。
“mkusb”还可以擦除混乱的数据并/或将 USB 启动驱动器还原为具有 MSDOS 分区表和 FAT32 文件系统的标准存储设备。
如果您想要更多详细信息,请查看以下链接:
- mkUSB快速入门手册:mkUSB快速入门手册链接 - mkusb持久化系统:mkusb持久化系统链接

关于mkusb的限制,获取更多信息将是很棒的。 - Léo Léopold Hertz 준영
1请问,我会回答。或者更好的是,您可以尝试一下,如果有什么问题,请随时提问 :-) - sudodus

哇,听起来很复杂,mkusb可以比我阅读上述任何一种方法更快地进行持久化安装。它们似乎也是完整安装而不是持久化安装。持久化安装使用casper-rw文件或分区。之所以称为持久化安装,是因为引导文件中的persistent一词用于激活持久性。

详细信息请参见:https://help.ubuntu.com/community/mkusb关于mkusb的详情。

使用mkusb制作的USB驱动器也没有问题,可以进行完整安装到硬盘或USB上。


似乎在Debian中也得到了支持。 - Léo Léopold Hertz 준영
它还可以作为Puppy Tahr等其他操作系统的一个相当不错的基础。 - C.S.Cameron
获取关于该工具与其他方法之间差异的评论将是很好的。优点和缺点。 - Léo Léopold Hertz 준영
一个制作持久化U盘的好指南,使用mkusb:http://askubuntu.com/questions/772744/how-to-make-a-live-usb-persistent/815493#815493 - C.S.Cameron
在这个页面上是由mkusb的创作者Sudodus编辑的快速安装指南。请注意,mkusb正在快速发展,并且目前版本为11.1.9。它还可能分叉出一个更直接的安装程序,名为dus。 - C.S.Cameron
我觉得这个指南只是一个简单的概述。我希望能够得到有关功能的评估。 - Léo Léopold Hertz 준영
在Ubuntu帮助页面https://help.ubuntu.com/community/mkusb上有详尽的文档,但是评论应该由其他人撰写... - sudodus