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 / | ||
| + | </ | ||
