Инструменты пользователя

Инструменты сайта


projects:temp

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
projects:temp [2025/04/02 19:00] projects:temp [2025/04/02 20:38] (текущий) – [1]
Строка 1: Строка 1:
 ====== rootfs ====== ====== rootfs ======
  
 +===== 1 =====
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Строка 77: Строка 77:
 done done
  
-# === 🔄 Подключение loop === +MAX_MB=$((LIMIT_GB * 1024))
-LOOP_DEV=$(losetup --show -Pf "$IMGFILE") +
-mkdir -p "$MOUNT_DIR" +
-mount "${LOOP_DEV}p2" "$MOUNT_DIR" +
- +
-# === Удаление авторасширения === +
-rm -f "$MOUNT_DIR/etc/init.d/resize2fs_once" +
-rm -f "$MOUNT_DIR/etc/systemd/system/resize2fs_once.service" +
-rm -f "$MOUNT_DIR/etc/rc*.d/*resize2fs_once" +
-sed -i 's@ init=/usr/lib/raspi-config/init_resize.sh@@' "$MOUNT_DIR/boot/cmdline.txt"+
  
 # === Установка stretch_limited в initramfs === # === Установка stretch_limited в initramfs ===
-mkdir -p "$MOUNT_DIR/etc/initramfs-tools/scripts/init-premount" +mkdir -p "$TARGET_DIR/etc/initramfs-tools/scripts/init-premount" 
-cat <<EOF > "$MOUNT_DIR$INITRD_SCRIPT"+cat > "$TARGET_DIR$INITRD_SCRIPT" <<EOF
 #!/bin/sh #!/bin/sh
-PREREQ="" +PRIORITY=top
-prereqs() { echo "\$PREREQ";+
-case "\$1" in +
-  prereqs) prereqs; exit 0;; +
-esac +
-. /scripts/functions+
  
-FLAG_FILE="/etc/.stretch_done"+exec 1>>/stretch_limiter.log 2>&
 +set -eux 
 + 
 +echo "[initramfs] stretch_limited: запуск"
 DEV="/dev/mmcblk0" DEV="/dev/mmcblk0"
 PART="\${DEV}p2" PART="\${DEV}p2"
-MAX_MB=\$((LIMIT_GB * 1024)) +FLAG_FILE="/etc/.stretch_done
-LOGFILE="/boot/stretch_limiter.log+MAX_MB=$MAX_MB
-log() { echo "[\$(date +%F\ %T)] \$1" >> "\$LOGFILE"; }+
  
-[ -f "\$FLAG_FILE"&& log "Флаг уже есть, выход" && exit 0 +if [ -f "\$FLAG_FILE" ]; then 
- +  echo айл stretch_done найден. Выход." 
-log "📉 Минимизация rootfs (resize2fs -M)..." +  exit 0 
-resize2fs -M "\$PART" 2>>"\$LOGFILE"+fi
  
-log "📐 Ограничиваем rootfs до \$MAX_MB МБ" 
 START=\$(fdisk -l "\$DEV" | awk '/mmcblk0p2/ {print \$2}') START=\$(fdisk -l "\$DEV" | awk '/mmcblk0p2/ {print \$2}')
 END=\$(fdisk -l "\$DEV" | awk '/mmcblk0p2/ {print \$3}') END=\$(fdisk -l "\$DEV" | awk '/mmcblk0p2/ {print \$3}')
 SECTOR_SIZE=\$(blockdev --getss "\$DEV") SECTOR_SIZE=\$(blockdev --getss "\$DEV")
 CURRENT_MB=\$(( (END - START + 1) * SECTOR_SIZE / 1024 / 1024 )) CURRENT_MB=\$(( (END - START + 1) * SECTOR_SIZE / 1024 / 1024 ))
 +
 +echo "Текущий размер: \$CURRENT_MB MB, лимит: \$MAX_MB MB"
  
 if [ "\$CURRENT_MB" -le "\$MAX_MB" ]; then if [ "\$CURRENT_MB" -le "\$MAX_MB" ]; then
-  log "✅ Размер уже в пределах" +  echo "Уже в пределах лимита.
-else +  touch "\$FLAG_FILE
-  parted -s "\$DEV" resizepart 2 "\${MAX_MB}MB+  exit 0
-  partprobe "\$DEV" +
-  sleep 1 +
-  resize2fs "\$PART" +
-  log "✅ rootfs ограничен до \$MAX_MB МБ"+
 fi fi
 +
 +echo "Изменение раздела..."
 +parted -s "\$DEV" resizepart 2 "\${MAX_MB}MB"
 +partprobe "\$DEV"
 +sleep 2
 +resize2fs "\$PART"
 touch "\$FLAG_FILE" touch "\$FLAG_FILE"
 +echo "✅ Готово"
 EOF EOF
-chmod +x "$MOUNT_DIR$INITRD_SCRIPT" 
  
-# === Монтируем окружение для chroot === +chmod +x "$TARGET_DIR$INITRD_SCRIPT"
-mount --bind /dev "$MOUNT_DIR/dev" +
-mount --bind /sys "$MOUNT_DIR/sys" +
-mount --bind /proc "$MOUNT_DIR/proc"+
  
-# === Установка локали и initramfs === +chroot "$TARGET_DIR" update-initramfs -u 
-chroot "$MOUNT_DIRapt-get update +ln -sf /boot/initrd.img-$(uname -r) "$TARGET_DIR/boot/initrd.img"
-chroot "$MOUNT_DIR" apt-get install -y locales initramfs-tools +
-chroot "$MOUNT_DIR" locale-gen en_US.UTF-8 || true +
-chroot "$MOUNT_DIRupdate-initramfs -c -k all+
  
-# === Отмонтирование окружения === 
-umount "$MOUNT_DIR/proc" 
-umount "$MOUNT_DIR/sys" 
-umount "$MOUNT_DIR/dev" 
- 
-# === Обновление config.txt и initrd.img === 
-sed -i '/^initramfs /d' "$MOUNT_DIR/boot/config.txt" 
-kver=$(chroot "$MOUNT_DIR" uname -r) 
-ln -sf "initrd.img-$kver" "$MOUNT_DIR/boot/initrd.img" 
-echo "initramfs initrd.img followkernel" >> "$MOUNT_DIR/boot/config.txt" 
- 
-umount "$MOUNT_DIR" 
-losetup -d "$LOOP_DEV" 
 echo "✅ stretch_limited установлен в initramfs и образ. Будет выполнен при загрузке до монтирования rootfs." echo "✅ stretch_limited установлен в initramfs и образ. Будет выполнен при загрузке до монтирования rootfs."
  
 +</code>
 +===== 2 =====
 +Проверка
 +<code>
 +lsinitramfs /boot/initrd.img-$(uname -r) | grep stretch_limited
 +</code>
 +<code bash>
 +lsinitramfs /boot/initrd.img-$(uname -r) -l | grep stretch_limited &&
 +lsinitramfs /boot/initrd.img-$(uname -r) | grep -q "stretch_limited" && echo "✅ Есть в initramfs"
 +</code>
 +<code bash>
 +cat /boot/stretch_limiter.log
 +df -h /
 </code> </code>
projects/temp.1743609659.txt.gz · Последнее изменение: 2025/04/02 19:00 —

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 4.0 International
CC Attribution 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki