Уважаемые гуру, помогите, пожалуйста понять где в этом скрипте задаётся размер раздела подкачки и как его уменьшить до минимума.
Полностью убрать вроде не получиться сами разработчики пишут, что это ломает скрипт. Но уменьшитьвроде можно.
https://gist.github.com/andaag/1379d6c2adcf4a84c91957a46bee3418
Хотел сначала убрать совсем но подсказали, что этого делать не стоит. Теперь хочу убрать на 3.0 флешку
Просто на 64 гигах оперативки толку от него чуть,
Оставлять свап на системном SSD я не хочу в принципеб а терять 2 гигабайта диска не хочется. :)
Поскольку в своей работе поменял тучу жестких дисков, где выделенная область под подкачку (линук виндовс не важно) была самой повреждённой. И даже на "умных" контроллерах SSD которые равномерно распределяют циклы перезаписи по диску это всё равно быстрее выводит их из строя.
Поэтому свап в таком случае проще поместить на USB 3.0 флешку которую быстро и дешево поменять.
Сами разработчики говорят что это возможно:
Показать
As told in the introduction, nothing is hardcoded in term of ZSys support for your partition layout (as long as you don’t have multiple pools with the same name, of course).
If you want to tweak the partition layout to your wish. For instance, to use multiple pools in mirrors, or using RAID-Z, you can for now (until we support manual partition layout in the installer) edit manually the zsys-setup script on the live ubuntu 20.04 LTS desktop image before reaching the partitioning page. This one is located at /usr/share/ubiquity/zsys-setup.
I think you saw that there has been a lot of thoughts and care in our default partition layout, so edit with care. :)
И судя по коду это делается где-то в этих местах, но дальше я понять не могу.
Здесь ...
Показать
get_layout() {
# Returns disk, base name of the partition and partition numbers to create
target="$1"
disk="$2"
if [ -z "${disk}" ]; then
# The entire disk has been formatted with use_device
# There is either one ext4 partition or one ext4 and one ESP
part="$(grep -E "\s${target}\s" /proc/mounts | awk '{print $1}')"
partbase=""
if [ -n "${part}" ]; then
disk="$(lsblk -lns -o TYPE,PATH ${part}| grep disk| awk '{print $2}')"
if [ -z "${disk}" ]; then
echo "E: Couldn't identify disk for partition ${part}. Exiting!"
exit 1
fi
# Some disks have letters in the partition number like /dev/nvme0n1p1
# In this case we want to retrieve 'p' so we deal only with partition number
# in the rest of the script and prepend the base.
partbase="$(echo ${part} | sed -e 's/[0-9]*$//' | sed -e "s#${disk}##")"
fi
else
# The only purpose of this code is to display a friendly message in ubiquity to show the user
# what partitioning will be performed. However, on first call, the disk is not yet partitioned
# and collecting the information about disk partitioning would require to query partman. But we
# don't want to add this extra complexity just to display a message. Instead we hardcode the
# extension of the partition name depending on the type of disk, basically it's 'p' for anything
# else than standard drives (eg nvme01pX)
case "${disk}" in
/dev/sd*|/dev/hd*|/dev/vd*)
partbase=""
;;
*)
partbase="p"
esac
fi
partesp=1
if is_gpt "${disk}"; then
# No extended partition on EFI + GPT
# The layout is
# 1: ESP
# 2: swap
# 3: bpool
# 4: rpool
partswap=2
partbpool=3
partrpool=4
else
# MBR pools are on extended partition
# The layout is:
# 1: ESP
# 2: Extended
# 5: swap
# 6: bpool
# 7: rpool
partswap=5
partbpool=6
partrpool=7
fi
echo "OK|${disk}|${partbase}|${partesp}|${partswap}|${partbpool}|${partrpool}"
}
format_disk() {
disk="$1"
partbase="$2"
partesp="$3"
partbpool="$4"
partrpool="$5"
ss="$6"
partswap=$(( partbpool - 1 ))
partext=$(( partesp + 1 ))
partprefix="${disk}${partbase}"
sfdisktmp="${ZSYSTMP}/sfdisk.cfg"
rm -f "${sfdisktmp}"
echo "I: Formatting disk $disk with partitions ESP:${partesp} ext:${partext} swap:${partswap} bpool:${partbpool} rpool:${partrpool}"
# bpool size: 500M < 5% of ZFS allocated space < 2G
# partswap is partition 2 on GPT systems and first extended partition on MBR.
size_percent=$(expr \( $(blockdev --getsize64 ${partprefix}${partswap}) / 1024 / 1024 \) \* 5 / 100)
bpool_size=500
[ ${size_percent} -gt ${bpool_size} ] && bpool_size=${size_percent}
[ ${bpool_size} -gt 2048 ] && bpool_size=2048
if is_gpt "${disk}"; then
# Improvement: Delete all the partitions but the ESP
# There should be only 1 or 2 partitions but it can be made generic
if ! esp_exists "${disk}"; then
start=$(sfdisk -l "${disk}"|grep "^${partprefix}${partesp}"|awk '{print $2}')
cat > "${sfdisktmp}" <<EOF
${partprefix}${partesp} : start= ${start}, size= 512M, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, bootable
EOF
else
sfdisk --delete "${disk}" ${partswap}
fi
cat >> "${sfdisktmp}" <<EOF
${partprefix}${partswap} : size= ${ss}M, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
${partprefix}${partbpool} : size= ${bpool_size}M, type=6A82CB45-1DD2-11B2-99A6-080020736631
${partprefix}${partrpool} : type=6A85CF4D-1DD2-11B2-99A6-080020736631
EOF
else
if ! esp_exists "${disk}"; then
start=$(sfdisk -l "${disk}"|grep "^${partprefix}${partesp}"|awk '{print $2}')
cat > "${sfdisktmp}" <<EOF
${partprefix}${partesp} : start= ${start}, size= 512M, type=ef, bootable
EOF
else
sfdisk --delete "${disk}" ${partswap}
fi
cat >> "${sfdisktmp}" <<EOF
${partprefix}${partswap} : size= ${ss}M, type=82
${partprefix}${partbpool} : size= ${bpool_size}M, type=a5
${partprefix}${partrpool} : type=a5
EOF
fi
cat "${sfdisktmp}" | sfdisk --append "${disk}"
# Force a re-read of the partition table
echo "I: Re-reading partition table"
partx --add "${disk}" 2>/dev/null || true
partx --show "${disk}"
}
... и здесь
Показать
# Swap files are not supported on ZFS, we use a swap partition instead:
SWAPFILE="$(grep "^${TARGET}" /proc/swaps |awk '{print $1}')"
# Give us a minimum swap partition size of 4MB in case we decide on
# no swap, just to keep the partition layout stable:
SWAPSIZE=4194304
# Disable swap and get the swap volume size:
if [ -n "${SWAPFILE}" ]; then
SWAPSIZE=$(stat -c%s "${SWAPFILE}")
echo "I: Found swapfile with size ${SWAPSIZE}. Disabling"
swapoff "${SWAPFILE}"
fi
# Convert to MiB to align the size on the size of a block
SWAPVOLSIZE=$(( SWAPSIZE / 1024 / 1024 ))
Но дальше я пока не понял. Мои эксперименты пока приводят к падению скрипта с ошибкой. :) :'(
Добавлено: 08.03.2021 15:54:47
Кроме того я не хочу бездумно ставить и надеяться, что всё заработает, а понимать как это работает, чтобы можно было в случае чего починить. Ну и просто интересно.
Очень много инфы почерпнул отсюда. Но к сожалению аглицкий я могу читать только с гугл переводчиком.