如何创建持久的 Debian live USB?

Pie*_*rre 13 debian live-usb persistence

我想通过将 Debian 安装在 USB 闪存驱动器上来随时随地使用 Debian,但我不确定如何使其保存设置并能够安装/更新软件包而不会在重新启动时丢失它们。

因此,我从此链接下载了混合 ISO 映像,并按照常见问题解答中的说明进行操作:

dd if=image.iso of=/dev/sdb bs=4M; sync
Run Code Online (Sandbox Code Playgroud)

此命令通过创建一个大小与 ISO 映像相同的分区(8GB 中的 1.3 GB)将映像复制到闪存驱动器,并且闪存驱动器的其余部分未分配。

我搜索了如何做到这一点,但每个教程都使用不同的方法,其中一些已经过时并谈论旧的 usb-hdd 映像。

那么我应该如何在闪存驱动器上安装这个混合映像?

我应该如何分区我的闪存驱动器才能安装软件包和保存设置?以及如何在不使用的情况下安装此映像dd

F. *_*uri 11

Debian 坚持不懈。

  1. 先用官方图片试试 www.debian.org/CD/live/

    来自 SE 站点(标准直播):

    wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-10.0.0-amd64-standard.iso
    
    Run Code Online (Sandbox Code Playgroud)

    从自动镜像选择(mate live):

    wget http://debian-cd.debian.net/debian-cd/10.0.0-live/amd64/iso-hybrid/debian-live-10.0.0-amd64-mate.iso
    
    Run Code Online (Sandbox Code Playgroud)

    然后校验和你下载文件https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/SHA256SUMS ...

    好的,ISO 文件系统是只读的,但有一些解决方法:我们可以通过这种方式替换非重要的bootparampersistence

    • 一旦文件验证!
    • 您可以通过sed用于替换二进制字符串来更改它们。

      LANG=C sed 's/splash quiet/persistence /;s/quiet splash/persistence /' \
          </tmp/debian-live-10.0.0-amd64-mate.iso \
          >/tmp/debian-live-10.0.0-amd64-mate-persist.iso
      
      Run Code Online (Sandbox Code Playgroud)

    这将通过严格替换或by ,在任何地方创建您的实时二进制文件的修改副本。好的,这只有在grub 引导命令确实包含这两个词时才有效。splash quietquiet splashpersistence

    但注意不要错过持久化后的空间:

    "splash quiet" -> 12 characters
    "persistence " -> 12 characters
    
    Run Code Online (Sandbox Code Playgroud)

    否则你的二进制文件将被破坏。

  2. 安装在 U 盘上

    dd if=debian-live-10.0.0-amd64-standard-persist.iso of=/dev/sdX
    
    Run Code Online (Sandbox Code Playgroud)

    然后添加您的第三个分区以进行持久化:

    fdisk /dev/sdX
    n           # new partition
    p           # primary
    <Return>    # default: 3
    <Return>    # default: next free sector
    <Return>    # default: last addressable sector
    w           # write and quit
    
    Run Code Online (Sandbox Code Playgroud)

    这可以在没有交互的情况下运行:

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    
    Run Code Online (Sandbox Code Playgroud)

    格式化并准备持久性union

    mkfs.ext4 -L persistence /dev/sdX3
    mount /dev/sdX3 /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    
    Run Code Online (Sandbox Code Playgroud)

    然后弹出并尝试!

    如果你使用官方的、未修改的镜像,为了使用持久化,你必须中断引导选择:

    一旦菜单显示屏幕中,选择你的启动选项,然后代替Return,命中Tab

    将显示内核命令行,然后persistence在最后一个单词 ( quiet)之后添加一个空格,然后点击Return

    不幸的是,由于第一个分区与 UEFI 捆绑在一起并且是 ISO,因此您无法修改引导命令。

定制的 Debian 持久化

你只需要添加persistence到引导命令行,但没有别的!?有一种方法,使用 FAT 和syslinux,但是你有很多数据操作。它很长,我觉得这不太好。我更喜欢:

  1. 实时构建您自己的 Debian

    规律,但更长一点(至少对于第一张图片),

    注意:所有这些东西都是在root用户下完成的(这必须通过 using 来工作fakeroot,但这在那里和今天都没有测试过)。

    apt install live-build
    
    Run Code Online (Sandbox Code Playgroud)

    ...以及所有建议。

    我写了一个XARGS删除注释行的小函数:

    XARGS() { sed -ne '/#/d;s/ \t//g;H;${x;s/\n/ /g;s/^ //;p}'; }
    
    Run Code Online (Sandbox Code Playgroud)

    第一个设置bootparams,带有本地化和持久性参数:

    ExtraBootParams=$(XARGS <<eobp
        boot=live
        config
        locales=ed_WT
        keyboard-layouts=ed
        keyboard-variant=wt
        persistence
    eobp
    )
    
    Run Code Online (Sandbox Code Playgroud)

    现在你的包裹清单:

    PackageList=$(XARGS <<-eopl
        gnome
        gnome-core
        # gnome-full
        # debian-forensics
        debian-installer-launcher
    eopl
    )
    
    Run Code Online (Sandbox Code Playgroud)

    第一步lb:创建初始树:

    lb config --architectures amd64 -d buster --debian-installer-gui \
        true --archive-areas 'main contrib non-free' \
        --bootappend-live "$ExtraBootParams" 
    
    Run Code Online (Sandbox Code Playgroud)

    现在,你有一棵小树,你可以:

    printf "%s\n" > config/package-lists/standard.list.chroot \
        $Packages $PackageList
    
    Run Code Online (Sandbox Code Playgroud)

    好的,下一个命令需要很长时间!(在我的主机上大约 1 小时)

    lb build
    
    Run Code Online (Sandbox Code Playgroud)

    如果一切正常,您可能会发现自己的Debian live

    ls -l *.iso
    -rw-r--r--  1 root root 1511817216 sep  7 15:32 live-image-amd64.hybrid.iso
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装在 USB 密钥上(与下载的二进制文件相同的操作)

    “异混合”图像包含了UEFI两个分区,并在某种程度上实况混合EFIBIOS可以引导的。

    file live-image-amd64.hybrid.iso
    live-image-amd64.hybrid.iso: DOS/MBR boot sector; partition 2 : ID
    =0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsect
    or 708, 5696 sectors
    
    Run Code Online (Sandbox Code Playgroud)

    您可以简单地放入您的 USB 密钥:(注意:首先确保您的 USB 密钥未安装!)

    dd if=live-image-amd64.hybrid.iso of=/dev/sdX
    
    Run Code Online (Sandbox Code Playgroud)

    然后添加您的第三个分区以进行持久化:

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    
    Run Code Online (Sandbox Code Playgroud)

    格式化并准备持久性union

    mkfs.ext4 -L persistence /dev/sdX3
    mount /dev/sdX3 /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    
    Run Code Online (Sandbox Code Playgroud)

    弹出并尝试...

Debian 使用加密持久性

  1. 实时构建您自己的 Debian,但具有加密持久性

    为了与根文件系统的引导/上加密的持久性,必须添加dm-crypt模块相关的二进制文件的initrd通过增加设置(初始RAM磁盘),CRYPTSETUP=y/etc/initramfs-tools/hooks/...

    我写了一个XARGS删除注释行的小函数:

    XARGS() { sed -ne '/#/d;s/ \t//g;H;${x;s/\n/ /g;s/^ //;p}'; }
    
    Run Code Online (Sandbox Code Playgroud)

    第一个设置bootparams,具有本地化和持久性和 cryptsetup 参数:

    ExtraBootParams=$(XARGS <<eobp
        boot=live
        config
        locales=ed_WT
        keyboard-layouts=ed
        keyboard-variant=wt
        persistent=cryptsetup
        persistence-encryption=luks
        persistence
    eobp
    )
    
    Run Code Online (Sandbox Code Playgroud)

    现在你的包裹清单:

    PackageList=$(XARGS <<-eopl
        gnome
        gnome-core
        # gnome-full
        # debian-forensics
        debian-installer-launcher
    eopl
    )
    
    Run Code Online (Sandbox Code Playgroud)

    以及您的套餐选择:

    Packages=$(XARGS <<-eopk
        cryptsetup
        cryptsetup-initramfs
        debian-installer-launcher
        firmware-linux-nonfree
        firmware-linux-free
        less
        ssh
    #   openvpn
    #   xtightvncviewer
        gsmartcontrol
        smartmontools
        partclone
        ntfs-3g
        task-gnome-desktop
        user-setup
        sudo
        apt-utils
    eopk
    )
    
    Run Code Online (Sandbox Code Playgroud)

    当然cryptsetup是必须的!;-)

    第一步lb:创建初始树:

    lb config --architectures amd64 -d buster --debian-installer-gui \
        true --archive-areas 'main contrib non-free' \
        --bootappend-live "$ExtraBootParams" 
    
    Run Code Online (Sandbox Code Playgroud)

    现在,你有一棵小树,你可以:

    printf "%s\n" > config/package-lists/standard.list.chroot \
        $Packages $PackageList
    
    Run Code Online (Sandbox Code Playgroud)

    好的,接下来的两个命令将花费很长时间!(在我的主机上大约 40')

    lb bootstrap ; lb chroot
    
    Run Code Online (Sandbox Code Playgroud)

    现在你可以添加你的模块和二进制文件:

    echo dm-crypt >> chroot/etc/initramfs-tools/modules
    
    sed '/CRYPTSETUP=/s/^#//;s/=.*/=y/' -i \
        chroot/etc/cryptsetup-initramfs/conf-hook 
    ln -s ../../cryptsetup-initramfs/conf-hook \
        chroot/etc/initramfs-tools/hooks/cryptsetup
    chroot chroot live-update-initramfs -u
    
    Run Code Online (Sandbox Code Playgroud)

    然后运行最后阶段(将花费更多的时间~25'):

    lb installer ; lb binary
    
    Run Code Online (Sandbox Code Playgroud)

    注意:如果你阅读cryptsetup: WARNING: Couldn't determine root device,那很好!这意味着cryptsetup安装在您的initrd.

    如果一切正常,您可能会发现自己的Debian live

    ls -l *.iso
    -rw-r--r--  1 root root 1511817216 sep  7 15:32 live-image-amd64.hybrid.iso
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装在 U 盘上

    “异混合” umage确实包含已为UEFI和现场混合的方式既两个分区EFIBIOS可以引导的。

    file live-image-amd64.hybrid.iso
    live-image-amd64.hybrid.iso: DOS/MBR boot sector; partition 2 : ID
    =0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsect
    or 708, 5696 sectors
    
    Run Code Online (Sandbox Code Playgroud)

    您可以简单地放入您的 USB 密钥:(注意:首先确保您的 USB 密钥未安装!)

    dd if=live-image-amd64.hybrid.iso of=/dev/sdX
    
    Run Code Online (Sandbox Code Playgroud)

    使用可用空间添加新的 Linux 分区。

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    
    Run Code Online (Sandbox Code Playgroud)

    这将使用 USB Key 上的可用空间创建分区 3

    然后准备你的加密分区

    cryptsetup -q luksFormat /dev/sdX3
    
    Run Code Online (Sandbox Code Playgroud)

    输入密码

    cryptsetup -q luksOpen /dev/sdX3 persist 
    
    Run Code Online (Sandbox Code Playgroud)

    再次输入密码

    mkfs.ext4 -L persistence /dev/mapper/persist
    mount /dev/mapper/persist /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    cryptsetup luksClose persist
    
    Run Code Online (Sandbox Code Playgroud)

就这样。

eject /dev/sdX
Run Code Online (Sandbox Code Playgroud)

  • 好的,我会重写所有这些,但不是今天......对不起。 (2认同)
  • +1;@F.Hauri,我尝试使用“parted”和“gparted”在 USB 驱动器的克隆部分之后创建持久性分区,但运气不佳。您表明“fdisk”有效(不会破坏克隆驱动器的启动)。是的,我发现有必要在每次启动时添加启动选项“persistence”,因为文件系统 iso9660 在设计上是只读的。我同意,例如在旅行时拥有加密持久性可能很酷(甚至非常有价值)。 (2认同)

sud*_*dus 6

克隆和 Debian 持久化

克隆(按原样复制每个字节,创建一对一副本)是一种从 linux 混合 iso 文件创建引导驱动器(实时驱动器或安装驱动器)的非常简单且可靠的方法。

没有传统的方法可以使克隆的 Debian iso 文件持久化,因为它具有只读文件系统 ISO9660(和只读“分区表”)。

使用 mkusb (BIOS/UEFI)

可以(我会说相当简单)使用mkusb从 Debian live iso 文件创建一个持久的实时驱动器。mkusb 支持 Debian 8 或更新版本,您应该使用 mkusb 的当前版本(版本 12.3.3 或更新版本)。

mkusb创建一个分区表和 5 个分区:

  1. 用于与 Windows 计算机交换数据的 NTFS 分区(可选大小)
  2. 扩展分区或bios_grub分区
  3. 用于引导的 FAT32 引导分区grub(在 UEFI 和 BIOS 模式下)
  4. ISO9660 分区包含 iso 文件的克隆
  5. ext 持久性分区,您的修改(和文件)存储在其中

mkusb会自动进行以下调整:

  • 启动选项persistence(不像persistent在 Ubuntu 中)
  • persistence分区 #5 上的标签(casper-rw与 Ubuntu 不同)
  • persistence.conf内容/ union位于分区 #5 顶层的文件。

此结构由 bash dus-persistentshellscript创建,当您使用 mkusb 版本 12 时, alias mkusb-dus。如果您需要所有详细信息,请安装 mkusb 并阅读 的内容dus-persistent,或者直接通过phillw.net/isos/linux-tools/mkusb/dus-persistent阅读。

mkusb 的默认设置可用于 Debian 8、9 和 10,并且在 BIOS 模式和 UEFI 模式(但不是安全启动)下启动时,持久活动驱动器将工作。

(在以前的版本 mkusb 12.3.2 中,您必须在 UEFI 模式下的 Debian 10 的“设置”菜单中手动设置“usb-pack-efi”。)

使用手动设置(仅限 UEFI)

如果您只需要 UEFI 引导闪存驱动器,则根本不需要安装程序。

您只需要使用 FAT32 格式化闪存驱动器并设置启动标志。然后使用您最喜欢的提取工具(如 7zip)提取 ISO 并将其复制到 FAT32 分区。有关更多详细信息,请参阅自己动手

我用标准的live iso文件(小,无图形桌面环境)验证了这个方法,

debian-live-10.0.0-amd64-standard.iso
Run Code Online (Sandbox Code Playgroud)

因此,通过这种方式,您可以使用 Debian 10(64 位)制作 USB 引导驱动器。它将是实时的,并以 UEFI 模式启动。

  • 创建一个足够大的 FAT32 分区来存储 iso 文件中的文件(将 iso 文件的大小增加大约 5%)
  • 挂载 FAT32 分区
  • 将iso文件的内容(包含所有文件的目录树)解压到FAT32分区

现在你有一个仅限实时的 USB 启动驱动器

  • 将单词编辑persistencelinux文件中以开头的行的末尾

    /path/to/mountpoint/boot/grub/grub.cfg
    
    Run Code Online (Sandbox Code Playgroud)
  • ext2在未分配的空间(FAT32分区后面)创建一个分区

  • 将标签贴persistenceext2分区上
  • 挂载ext2分区
  • 写入/ union到文件persistence.confext2文件系统

  • 在拔下闪存驱动器或重新启动之前卸载闪存驱动器上的所有分区

现在您拥有了一个带有 Debian 10 的永久实时 USB 驱动器。


从永久实时驱动器中看到的命令输出:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7.8G     0  7.8G   0% /dev
tmpfs           1.6G  9.0M  1.6G   1% /run
/dev/sdb1       4.0G  826M  3.2G  21% /run/live/persistence/sdb1
/dev/loop0      610M  610M     0 100% /run/live/rootfs/filesystem.squashfs
tmpfs           7.8G     0  7.8G   0% /run/live/overlay
/dev/sdb2        11G   38M   11G   1% /run/live/persistence/sdb2
overlay          11G   38M   11G   1% /
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
tmpfs           7.8G     0  7.8G   0% /tmp
tmpfs           1.6G     0  1.6G   0% /run/user/1000

$ lsb_release -a
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:    10
Codename:   buster

$ lsblk -fm /dev/sdb
NAME   FSTYPE LABEL       UUID                                 FSAVAIL FSUSE% MOUNTPOINT                            SIZE OWNER GROUP MODE
sdb                                                                                                                14.8G             brw-rw----
??sdb1 vfat   USBBOOT     7176-C538                               3.2G    20% /usr/lib/live/mount/persistence/sdb1    4G             brw-rw----
??sdb2 ext2   persistence 2b324439-d63e-4a19-bf57-d49ecb881828     10G     0% /usr/lib/live/mount/persistence/sdb2 10.8G             brw-rw----
Run Code Online (Sandbox Code Playgroud)

您可以看到,大小overlay/dev/sdb2其中的大小匹配表明持久性正在工作。

使用mkusb-minp(BIOS/UEFI)

可以(我会说相当简单)使用mkusb-minp从 Debian live iso 文件创建一个持久的 live 驱动器。mkusb-minp支持 Debian 10 或更新版本。这个简单的shellscript是从mkusb-min开发的。他们都在克隆过程中“系上安全带”,以帮助避免写入错误的设备。

这是一个不错的选择,如果您不想通过 PPA 添加软件或一般只想使用您可以理解的工具。


YoM*_*smo 4

为什么不选择 USB 设备而不是 HDD 作为目标来重新安装 Debian?你的USB有多大容量?

我安装了 Debian LXDE,并在 4GB USB 记忆棒中运行,可以随时更新系统并在需要时安装软件包。

  • 使用“已安装的系统”不适合必须在许多不同硬件上启动的 USB 闪存盘。真正的“实时”是以允许多种硬件的方式构建的 (5认同)
  • 顺便说一句,您可能想在 ram 上而不是在磁盘上创建 /tmp,您只需将行 `tmpfs /tmp tmpfs nodev,nosuid,size=2G 0 0` 添加到您的 fstab (将 2G 更改为您想要的大小,并记住您分配给 tmp 的数量将不可用于其他应用程序) (2认同)