Debian 预种子交换标签

Debian 预种子交换标签

我已经非常成功地预置了 Debian 安装,但有一个问题。我希望对我的swap分区进行标记,但安装程序忽略了该label { }元素。分区已创建,它有一个UUID,但我想通过标签安装(带 Windows 的多系统环境等)。创建其他标签没有问题。

我正在预置 Debian Stretch。

d-i partman/early_command \
        string sfdisk --wipe-partitions always --delete /dev/sda 2 3 4
d-i partman-auto/disk string /dev/sda
d-i partman-auto/init_automatically_partition select biggest_free

d-i partman-auto/expert_recipe string                       \
    lk-part ::                                              \
            2000 2000 2000 linux-swap                       \
                    $primary{ }                             \
                    method{ swap }                          \
                    format{ }                               \
                    label{ SWAPPART }                       \
            .                                               \
            50000 50000 50000 xfs                           \
                    $primary{ }                             \
                    method{ format }                        \
                    format{ }                               \
                    use_filesystem{ }                       \
                    filesystem{ xfs }                       \
                    mountpoint{ / }                         \
                    label{ LKLINUX }                        \
            .                                               \
            40000 40100 -1 xfs                              \
                    $primary{ }                             \
                    method{ format }                        \
                    format{ }                               \
                    use_filesystem{ }                       \
                    filesystem{ xfs }                       \
                    mountpoint{ /tmp }                      \
                    label{ TEMPFS }                         \
            .
d-i partman/mount_style select label

有谁知道为什么上面的标签swap被忽略?

安装后,当我手动执行以下操作时:

swapoff /dev/sda2
mkswap --label SWAPPART /dev/sda2
swapon /dev/sda2

标签存在并显示,例如通过blkid

最好的问候
卡米尔

答案1

我意识到这个问题相当老了,但以防万一有人偶然发现这个问题,这里是答案:

交换标签被忽略的原因是安装程序使用来自 busybox 的 mkswap,它无法设置标签。 [要验证这一点,只需启动到网络启动安装程序,切换到第二个控制台 (Alt+F2) 并查看 mkswap 二进制文件。]

作为解决方法,我创建了一个 debian 包 luh-label-swap,它在安装时重新格式化交换分区(通过预安装脚本),保留 UUID 并设置标签 swap、swap1、swap2 等,并修复 fstab 条目。

您可以在我们的存储库中找到该包:http://ubuntu.repo.uni-hannover.de/ubuntu/pool/pub/l/luh-label-swap/相关代码见下文。

这不是一个非常优雅的解决方案,但对我们有用。 :)

问候,罗伯特

这些是相关部分:

debian/postinst

#!/bin/sh
# postinst script for luh-label-swap

set -e

# [..]

case "$1" in
    configure)
            cp -a /etc/fstab /etc/fstab.dpkg-old
            /usr/lib/luh-label-swap/label-swap
            echo "modified /etc/fstab; old version saved as /etc/fstab.dpkg-old."
    ;;
    abort-upgrade|abort-remove|abort-deconfigure)
    ;;
    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

#DEBHELPER#

exit 0

/usr/lib/luh-标签交换/标签交换

#!/bin/bash
# /usr/lib/luh-label-swap/label-swap
#

FSTAB="/etc/fstab"

IAM="$(basename $0)"
unset NO
swapoff -a
for UUID in $(egrep '^UUID=[0-9a-f-]+\s+[[:alpha:]]+\s+swap' "$FSTAB" \
                | sed 's/^UUID=\([0-9a-f-]*\).*/\1/'); do
        echo "$IAM: found swap with UUID=$UUID"
        DEVICE="$(blkid -U "$UUID")"
        if [ -n "$DEVICE" ]; then
                LABEL="swap$NO"
                test -v $NO && NO+=1 || declare -i NO=1
                echo $IAM: mkswap --label "$LABEL" --uuid "$UUID" "$DEVICE"
                mkswap --label "$LABEL" --uuid "$UUID" "$DEVICE"  >/dev/null 2>&1
                echo $IAM: sed -i "s/^UID=$UUID/LABEL=$LABEL/" "$FSTAB"
                sed -i "s/^UUID=$UUID/LABEL=$LABEL/" "$FSTAB"
        fi
done
swapon -a

相关内容