如何创建具有持久性的Debian live USB?


11

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

因此,我从此链接下载了混合ISO映像,然后按照FAQ中的说明进行操作:

dd if=image.iso of=/dev/sdb bs=4M; sync

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

我搜索了如何执行此操作,但是每个教程都使用不同的方法,其中一些已过时,并讨论了旧的usb-hdd映像。

那么,如何在闪存驱动器上安装此混合映像?

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


这本过时的教程(2011年)准确地描述了GParted中的结果。使用USB-HDD映像的Debian 6.0.0(Squeeze)可以做到这一点。再说一次,对于新发行的Debian,我似乎无法通过使用混合ISO映像来再现结果。
clearkimura

@clearkimura尝试使用UEFI + BIOS可引导的实时Debian弹性amd64持久化。如果答案适合您,则应向schlimmchen用户授予赏金。
弗雷迪

混合ISO是可以从CD-ROM 引导的映像,也可以从USB设备引导的映像因为它们还包含MBR。这些映像是只读的(squashfs文件系统),因此无法写入,它们通常具有一个分区。因此,您将不得不为持久性创建第二个可写分区,添加persistence.conf配置文件,并在grub / syslinux配置中添加“持久性”内核启动参数以检测第二个分区。
弗雷迪

@Freddy如果您认为迄今为止提供的答案比发布的答案更好-解释为什么克隆(使用dd或cp)不能如官方文档所述持久化- 您应将注释转换为正确的答案代替。
clearkimura

1
赏金后的作业:在继续阅读,阅读和阅读网络上的各种文本并进行了几轮反复试验后,我设法更好地了克隆(是的,混合ISO 可以在USB上与持久性兼容,根据官方文档)。但是要使用Debian 10进行下载和测试,我可能很快就会得到我自己的答案。
clearkimura

Answers:


7

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
    

    从自动镜像选择(实时配对):

    wget http://debian-cd.debian.net/debian-cd/10.0.0-live/amd64/iso-hybrid/debian-live-10.0.0-amd64-mate.iso
    

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

    好的ISO文件系统是只读的,但有一点解决方法:我们可以更换非至关重要机bootparam通过persistence这种方式。

    • 一旦文件通过验证!
    • 您可以通过使用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
      

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

    但是要注意不要在持久性之后错过空间:

    "splash quiet" -> 12 characters
    "persistence " -> 12 characters
    

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

  2. 在USB密钥上安装

    dd if=debian-live-10.0.0-amd64-standard-persist.iso of=/dev/sdX
    

    然后添加第三个分区以实现持久性:

    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
    

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

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    

    格式化并准备持久性union

    mkfs.ext4 -L persistence /dev/sdX3
    mount /dev/sdX3 /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    

    然后弹出并尝试!

    如果您使用未修改的官方映像,以使用persistence,则必须中断引导选择:

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

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

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

持久化定制Debian live

您只需要添加persistence到启动命令行,就可以了!有一种使用FAT和的方法syslinux,但是您有很多数据操作。时间很长,我觉得不太好。我更喜欢:

  1. 现场构建自己的Debian

    规则,但更长一些(至少对于第一张图片而言),

    注意:所有这些工作都是在root用户下完成的(必须通过使用来工作fakeroot,但目前尚未进行测试)。

    apt install live-build
    

    ...以及所有建议。

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

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

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

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

    现在您的包裹清单:

    PackageList=$(XARGS <<-eopl
        gnome
        gnome-core
        # gnome-full
        # debian-forensics
        debian-installer-launcher
    eopl
    )
    

    第一步lb:创建初始树:

    lb config --architectures amd64 -d buster --debian-installer-gui \
        true --archive-areas 'main contrib non-free' \
        --bootappend-live "$ExtraBootParams" 
    

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

    printf "%s\n" > config/package-lists/standard.list.chroot \
        $Packages $PackageList
    

    好的,下一条命令将花费很长时间!(在我的主机上大约1小时)

    lb build
    

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

    ls -l *.iso
    -rw-r--r--  1 root root 1511817216 sep  7 15:32 live-image-amd64.hybrid.iso
    
  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
    

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

    dd if=live-image-amd64.hybrid.iso of=/dev/sdX
    

    然后添加第三个分区以实现持久性:

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    

    格式化并准备持久性union

    mkfs.ext4 -L persistence /dev/sdX3
    mount /dev/sdX3 /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    

    弹出并尝试...

Debian Live具有加密的持久性

  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}'; }
    

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

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

    现在您的包裹清单:

    PackageList=$(XARGS <<-eopl
        gnome
        gnome-core
        # gnome-full
        # debian-forensics
        debian-installer-launcher
    eopl
    )
    

    和您的包裹选择:

    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
    )
    

    当然cryptsetup是必需的!;-)

    第一步lb:创建初始树:

    lb config --architectures amd64 -d buster --debian-installer-gui \
        true --archive-areas 'main contrib non-free' \
        --bootappend-live "$ExtraBootParams" 
    

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

    printf "%s\n" > config/package-lists/standard.list.chroot \
        $Packages $PackageList
    

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

    lb bootstrap ; lb chroot
    

    现在,您可以添加模块和二进制文件:

    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
    

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

    lb installer ; lb binary
    

    注意:如果您阅读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
    
  2. 在USB密钥上安装

    “异混合” 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
    

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

    dd if=live-image-amd64.hybrid.iso of=/dev/sdX
    

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

    fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
    

    这将使用USB闪存盘上的可用空间创建分区3

    然后准备加密分区

    cryptsetup -q luksFormat /dev/sdX3
    

    输入密码

    cryptsetup -q luksOpen /dev/sdX3 persist 
    

    再次输入密码

    mkfs.ext4 -L persistence /dev/mapper/persist
    mount /dev/mapper/persist /mnt
    echo '/ union' >/mnt/persistence.conf
    sync
    umount /mnt
    cryptsetup luksClose persist
    

就这样。

eject /dev/sdX

这很有趣:1. bin当前的Debian版本是否有可用的文件?2.请告诉我们您的方法是否有效以及如何工作(对于当前版本的Debian)。
sudodus

1
@sudodus自Debian 7(Wheezy)起,不再构建USB-HDD映像供发布。我至少可以确认USB-HDD映像可用于Debian 5(Lenny)和6(Squeeze)。USB-HDD映像是否.img存在.bin,但我想它们与Debian Wiki基本相同。
clearkimura

2
好的,我将重写所有这些内容,但是今天不行。对不起。
F. Hauri

@sudodus Rewite完成了,,对不起:bin在debian.org上发布的图像不会以加密的持久性启动。
F. Hauri

1
+1; @ F.Hauri,在尝试克隆USB驱动器的一部分之后,我尝试创建分区以实现持久性partedgparted但运气不佳。您可以证明该方法fdisk有效(不会破坏克隆驱动器的启动)。是的,我看到有必要persistence在每次引导时都添加引导选项,因为文件系统iso9660在设计上是只读的。我同意,例如在旅行时具有加密的持久性可能很酷(甚至非常有价值)。
sudodus

4

为什么不重新安装Debian,而是选择USB设备而不是HDD作为目的地?您的USB有什么容量?

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


这是一个8GB的闪存驱动器,我想使用GNOME,并认为它会占用很多空间,并且GNOME实时映像仅为1.3 GB,但是我的HDD安装更大,但我不知道确切多少,您使用了安装映像吗?
Pierre

@Peter-默认安装应该为8GB。
slm

我使用cdimage.debian.org/debian-cd/current-live/i386/iso-hybrid / ...,因为我想提高速度,所以选择了lxde。您也有一个gnome图像。来自USB的Gnome可能会有点慢,但是如果您有足够的RAM,则第一次打开应用程序只会很慢,下次打开时会更快。关于空间,很显然,您将已将在USB中安装的应用程序数量减少到了您真正使用/需要的应用程序数量,其余的留给了家用计算机。
YoMismo

2
顺便说一句,您可能想在ram上而不是在磁盘上创建/ tmp,只需将行添加tmpfs /tmp tmpfs nodev,nosuid,size=2G 0 0到fstab中(将2G更改为您想要的大小,并记住您的数量分配给tmp的其余应用将不可用)
YoMismo 2014年

2
使用已安装的系统不适合必须在许多不同硬件上启动的USB密钥。真正的现场直播将以允许使用多种硬件的方式构建
F. Hauri

4

克隆和Debian持久化

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

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

使用mkusb(BIOS / UEFI)

可能(并且我会说很简单)使用mkusb从Debian live iso文件创建持久的活动驱动器。mkusb支持Debian 8或更高版本,并且您应该使用当前版本的mkusb(12.3.3或更高版本)。

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

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

mkusb自动执行以下调整:

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

dus-persistent当您使用mkusb版本12,alias时,该结构由bash shellscript 创建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分区。有关更多详细信息,请参见“自己动手做”。

我使用标准的实时iso文件(较小,没有图形桌面环境)验证了此方法,

debian-live-10.0.0-amd64-standard.iso

因此,您可以使用Debian 10(64位)制作USB启动驱动器。它将仅处于活动状态,并以UEFI模式启动。

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

现在,您有了一个只能使用的USB启动驱动器

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

    /path/to/mountpoint/boot/grub/grub.cfg
    
  • ext2在未分配空间中创建一个分区(在FAT32分区之后)

  • 将标签persistence放在ext2分区上
  • 挂载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----

您可以看到overlay匹配的大小/dev/sdb2表明持久性正在起作用。

使用mkusb-minp(BIOS / UEFI)

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

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


1
用户的一般信息:截至今天(2019年9月5日),mkusb 12.3.2-1ubuntu4 可通过适用于Ubuntu 12.04及更高版本的PPA获得。SparkyLinux,基于Debian的发行版,在同一个版本的库在2019年3月宣布
clearkimura

1
赏金后评论:该sed命令只是一种解决方法,但是似乎没有人评论或解释这些限制。我认为,从其他答案中复制解决方案的弊大于利,除非您能弄清什么时候行不通。
clearkimura

@clearkimura,我已经测试了F.Hauri的“所有方式”以“二进制编辑” persistence 到Debian 10 iso文件中,在其后面创建一个分区,fdisk并对该分区进行调整以使其成为持久数据的容器。我可以确认它在UEFI和BIOS模式下都可以与Debian 10一起使用,但是我还不能说以前的版本(Debian 8和9)。我从答案中删除文本,并仅对此发表评论。
sudodus

1
不知道我的评论是否被误解了,但我只是想暗示该sed命令不适用于所有人。鉴于这只是一种解决方法,因此不值得花时间进行进一步的测试。
clearkimura

1
我已经在mkusb2年前进行了测试,它可以完美地用于创建持久化的debian 8和9。这是我关于U&L的答案
GAD3R

1

首先-我不是Linux专家-对它的熟悉程度超过普通的Joe。

您可以使用yummi安装程序来创建Debian 10 usb(我使用了16GB的棒子)引导棒,然后从中引导。

一次插入一次,将大USB棒插入另一个端口(我正在用128GB Samsung FIT闪存驱动器进行此操作),然后双击桌面上的Install Debian图标。

遍历普通内容,直到进入分区,然后选择“ manual。”。在“ manual partitioning”屏幕中,确保选择了128GB USB记忆棒(或您使用的任何一个-确保它不是所用PC的本地驱动器为此,请确保当前运行的Debian不是16GB USB闪存盘)

完成后,删除128GB USB记忆棒中的所有现有分区,并创建以下3个分区。

500 MB / boot / efi 1942MB linuxswap其余ext2(我的是119GB)

----我不会将ext3或4用于USB记忆棒-不知道为什么,几年前,有个Linux家伙告诉我,我坚持使用它。如果有人知道为什么,请告诉我们?

最后确保将引导加载程序安装到正确的USB记忆棒上-这与我进行分区时位于同一页上,很容易错过-对我来说,它位于最底部,我必须将其从用于执行此操作的PC的本地SDD更改为Samsung 128GB FIT闪存驱动器。毕竟,接下来...等待大约一个小时左右(以我为例)。

如果Debian live锁定,则密码为“ live”,当然不带引号。

在输入此命令时它完成了,所以我重新启动并登录到从我的三星128GB FIT USB闪存驱动器运行的功能完善的Debian 10系统。与约。经过10分钟的使用,我能够确认磁盘空间是否正确(很多),它似乎比我的NvMe本地驱动器慢一些,但比稳压器7200RPM HDD快。

嗯,去。


哦,是的,我使用了非免费的Debian 10 KDE,但我认为任何方式都可以用这种方式..am将从笔记本电脑上拉出的棒子(我曾经用它来创建它)并在台式机和网络服务器上试用,以确保它可以在多个计算机制造商中正常运行,并且不仅限于我的笔记本电脑,我们将看到...让您在10分钟左右的时间内知道...
Jon

在所有系统上都可以正常工作-我必须在BIOS上启用安全启动的系统上禁用安全启动(x2-在五个系统上进行测试= 1个较旧型号的HP Inspiron,1个REAL较旧型号的Dell XPS,1个Alienware Aurora R4-安全启动未启用,一台Alienware Aurora R8-已启用安全启动-必须禁用它才能启动启动,而一台MSI Infinite X也已启用安全启动,而我已将其禁用)。除了那个NP。这仅用于诊断目的-否则,我将其安装到NvME并从该驱动器安全地引导它并完成它。
乔恩

您以一种很好的方式描述了如何在USB驱动器(类似于内部驱动器中安装)中创建已安装的系统。这是一个很好的选择,但是它不能回答该线程的原始问题。无论如何,我认为您的努力值得(+1)。
sudodus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.