projects:temp
Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
projects:temp [2025/04/02 17:57] – создано - внешнее изменение 127.0.0.1 | projects:temp [2025/04/02 20:38] (текущий) – [1] | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== | + | ====== |
- | Если снять новый образ с sd карты raspberry которая ни разу не запускалась, | + | |
- | + | ||
- | - находит последний сектор второго раздела (p2) в .img;\\ | + | |
- | + | ||
- | - рассчитывает нужный размер; | + | |
- | + | ||
- | - делает безопасную обрезку .img с запасом.\\ | + | |
+ | ===== 1 ===== | ||
<code bash> | <code bash> | ||
#!/bin/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 | set -euo pipefail | ||
+ | [[ $EUID -ne 0 ]] && exec sudo " | ||
- | IMG="$1" | + | MOUNT_DIR="/ |
- | SAFETY_MB=4 | + | INITRD_SCRIPT="/ |
- | [[ ! -f "$IMG" ]] && | + | # === 📁 Поиск и выбор устройств === |
+ | mapfile | ||
+ | if [[ ${# | ||
+ | | ||
+ | | ||
+ | fi | ||
- | echo "📂 Анализируем: $IMG" | + | echo "📍 Выбери куда подключён образ .img:" |
- | END_SECTOR=$(fdisk -l "$IMG" | awk '/ | + | i=1 |
- | SECTOR_SIZE=$(fdisk | + | for dev in "${DEVICES[@]}"; do |
- | SECTOR_SIZE=${SECTOR_SIZE:-512} | + | IFS=":" |
+ | status="" | ||
+ | [[ -z "$mnt" | ||
+ | echo " | ||
+ | ((i++)) | ||
+ | done | ||
+ | read -rp "🔀 Выбор: " choice | ||
+ | [[ " | ||
- | FINAL_BYTES=$(( (END_SECTOR + 1 + (SAFETY_MB * 1024 * 1024 / SECTOR_SIZE)) * SECTOR_SIZE | + | SEL_DEV=" |
- | FINAL_MB=$(( FINAL_BYTES / 1024 / 1024 )) | + | IFS=":" |
- | echo "📏 Конец rootfs в секторе: | + | if [[ -z "$DEV_MNT" |
- | echo "📦 Новый размер: | + | |
+ | mkdir -p "$MNT_PATH" | ||
+ | mount " | ||
+ | TARGET_DIR=" | ||
+ | else | ||
+ | TARGET_DIR=" | ||
+ | fi | ||
- | read -rp "✅ Обрезать .img до $FINAL_MB МБ? [y/N] " confirm | + | # === 📂 Поиск образов === |
- | [[ " | + | mapfile |
+ | if [[ ${# | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | echo "📂 Образы:" | ||
+ | i=1 | ||
+ | for img in " | ||
+ | echo " | ||
+ | ((i++)) | ||
+ | done | ||
+ | read -rp "🔀 Выбор образа: " img_choice | ||
+ | [[ " | ||
+ | |||
+ | IMGFILE=" | ||
+ | |||
+ | # === Запрос лимита === | ||
+ | while true; do | ||
+ | read -rp "📆 Укажи лимит размера rootfs в ГБ (0 = до конца диска, по умолчанию 30): " input_limit | ||
+ | if [[ -z "$input_limit" | ||
+ | read -rp "🔁 Установить 30 ГБ? [Y/n] " confirm | ||
+ | | ||
+ | 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." | ||
- | truncate -s " | ||
- | echo "✅ Готово: | ||
</ | </ | ||
- | запуск | + | ===== 2 ===== |
+ | Проверка | ||
+ | < | ||
+ | lsinitramfs / | ||
+ | </ | ||
<code bash> | <code bash> | ||
- | chmod +x hard_shrink_img.sh | + | lsinitramfs / |
- | ./hard_shrink_img.sh /media/pi/DEXP_SSD/ | + | lsinitramfs |
+ | </code> | ||
+ | <code bash> | ||
+ | cat /boot/stretch_limiter.log | ||
+ | df -h / | ||
</ | </ | ||
- |
projects/temp.1743605852.txt.gz · Последнее изменение: 2025/04/02 17:57 — 127.0.0.1