projects:temp
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия | |||
— | projects:temp [2025/04/02 20:38] (текущий) – [1] | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== rootfs ====== | ||
+ | ===== 1 ===== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | export LANG=en_US.UTF-8 | ||
+ | export LC_ALL=en_US.UTF-8 | ||
+ | # 06_patch_img_stretch.sh — внедрение stretch_limited в initramfs и образ .img с проверками и подтверждением | ||
+ | |||
+ | set -euo pipefail | ||
+ | [[ $EUID -ne 0 ]] && exec sudo " | ||
+ | |||
+ | MOUNT_DIR="/ | ||
+ | INITRD_SCRIPT="/ | ||
+ | |||
+ | # === 📁 Поиск и выбор устройств === | ||
+ | mapfile -t DEVICES < <(lsblk -nrpo NAME, | ||
+ | if [[ ${# | ||
+ | echo "❌ Нет доступных устройств." | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | echo "📍 Выбери куда подключён образ .img:" | ||
+ | i=1 | ||
+ | for dev in " | ||
+ | IFS=":" | ||
+ | status="" | ||
+ | [[ -z " | ||
+ | echo " | ||
+ | ((i++)) | ||
+ | done | ||
+ | read -rp "🔀 Выбор: " choice | ||
+ | [[ " | ||
+ | |||
+ | SEL_DEV=" | ||
+ | IFS=":" | ||
+ | |||
+ | if [[ -z " | ||
+ | MNT_PATH="/ | ||
+ | mkdir -p " | ||
+ | mount " | ||
+ | TARGET_DIR=" | ||
+ | else | ||
+ | TARGET_DIR=" | ||
+ | fi | ||
+ | |||
+ | # === 📂 Поиск образов === | ||
+ | mapfile -t IMG_LIST < <(find " | ||
+ | if [[ ${# | ||
+ | echo "❌ Образы .img не найдены в $TARGET_DIR" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | echo "📂 Образы:" | ||
+ | i=1 | ||
+ | for img in " | ||
+ | echo " | ||
+ | ((i++)) | ||
+ | done | ||
+ | read -rp "🔀 Выбор образа: | ||
+ | [[ " | ||
+ | |||
+ | IMGFILE=" | ||
+ | |||
+ | # === Запрос лимита === | ||
+ | while true; do | ||
+ | read -rp "📆 Укажи лимит размера rootfs в ГБ (0 = до конца диска, по умолчанию 30): " input_limit | ||
+ | if [[ -z " | ||
+ | read -rp "🔁 Установить 30 ГБ? [Y/n] " confirm | ||
+ | if [[ " | ||
+ | elif [[ " | ||
+ | LIMIT_GB=" | ||
+ | break | ||
+ | else | ||
+ | echo "⛔ Только целые числа, пожалуйста." | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | MAX_MB=$((LIMIT_GB * 1024)) | ||
+ | |||
+ | # === Установка stretch_limited в initramfs === | ||
+ | mkdir -p " | ||
+ | cat > " | ||
+ | #!/bin/sh | ||
+ | PRIORITY=top | ||
+ | |||
+ | exec 1>>/ | ||
+ | set -eux | ||
+ | |||
+ | echo " | ||
+ | DEV="/ | ||
+ | PART=" | ||
+ | FLAG_FILE="/ | ||
+ | MAX_MB=$MAX_MB | ||
+ | |||
+ | if [ -f " | ||
+ | echo " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | START=\$(fdisk -l " | ||
+ | END=\$(fdisk -l " | ||
+ | SECTOR_SIZE=\$(blockdev --getss " | ||
+ | CURRENT_MB=\$(( (END - START + 1) * SECTOR_SIZE / 1024 / 1024 )) | ||
+ | |||
+ | echo " | ||
+ | |||
+ | if [ " | ||
+ | echo " | ||
+ | touch " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | echo " | ||
+ | parted -s " | ||
+ | partprobe " | ||
+ | sleep 2 | ||
+ | resize2fs " | ||
+ | touch " | ||
+ | echo "✅ Готово" | ||
+ | EOF | ||
+ | |||
+ | chmod +x " | ||
+ | |||
+ | chroot " | ||
+ | ln -sf / | ||
+ | |||
+ | echo "✅ stretch_limited установлен в initramfs и образ. Будет выполнен при загрузке до монтирования rootfs." | ||
+ | |||
+ | </ | ||
+ | ===== 2 ===== | ||
+ | Проверка | ||
+ | < | ||
+ | lsinitramfs / | ||
+ | </ | ||
+ | <code bash> | ||
+ | lsinitramfs / | ||
+ | lsinitramfs / | ||
+ | </ | ||
+ | <code bash> | ||
+ | cat / | ||
+ | df -h / | ||
+ | </ |