首页
关于
Search
1
HD9901-RK3399海纳思刷机包
10 阅读
2
hinas版portainer---docker面板,限arm机器
5 阅读
3
DIY HD9901(RK3399) Hinas镜像优化记录-boot优化,长文件名会被自动截断为8.3短文件名
5 阅读
4
DIY HD9901(RK3399) Hinas刷机后,优化--250902
5 阅读
5
linux交换区调整
5 阅读
默认分类
Linux
Windows
幼小学作业
登录
Search
lishx
累计撰写
19
篇文章
累计收到
2
条评论
首页
栏目
默认分类
Linux
Windows
幼小学作业
页面
关于
搜索到
19
篇与
的结果
2025-08-29
hinas版portainer---docker面板,限arm机器
ARM架构专属:Hinas版Portainer Docker管理面板部署指南环境准备# 确保安装必要依赖 apt install -y wget nano安装步骤1. 下载部署包cd / wget http://m.lpv4.cn:20080/tars/portaier_cn.tar.gz tar zxvf portaier_cn.tar.gz2. 创建工作目录mkdir -p /opt/Portainer/compose/portainer cd /opt/Portainer/compose/portainer3. 配置docker-compose文件使用nano编辑器创建配置文件:nano docker-compose.yml粘贴以下配置内容:services: portainer: image: registry.cn-hangzhou.aliyuncs.com/histb/portainer:2.14.0 container_name: Portainer restart: always network_mode: host volumes: - /var/run/docker.sock:/var/run/docker.sock - /opt/Portainer:/data - /opt/Portainer/portainer_public:/public - /dev:/dev stdin_open: true tty: true privileged: true配置说明:network_mode: host:直接使用宿主机网络privileged: true:授予设备访问权限(需谨慎使用)卷挂载说明:/var/run/docker.sock:Docker API接口/opt/Portainer:持久化存储目录4. 启动服务docker compose up -d验证安装# 查看容器状态 docker ps | grep Portainer # 访问管理界面 浏览器访问:http://<设备IP>:9000常见问题端口冲突:若9000端口被占用,修改docker-compose的ports配置权限问题:确保/var/run/docker.sock有正确权限镜像拉取失败:尝试更换国内镜像源:docker pull registry.cn-hangzhou.aliyuncs.com/histb/portainer:2.14.0升级指南cd /opt/Portainer/compose/portainer docker compose down docker pull registry.cn-hangzhou.aliyuncs.com/histb/portainer:最新版本号 docker compose up -d卸载方法docker compose down rm -rf /opt/Portainer注意事项ARMv7/ARMv8设备需确认CPU架构兼容性生产环境建议加强安全设置:修改默认端口启用HTTPS定期备份/opt/Portainer目录通过本文部署的Portainer面板,可实现:Docker容器/镜像/卷的可视化管理用户权限控制设备资源监控栈部署(Stack部署)功能提示:首次登录需创建管理员账号,建议使用强密码策略。默认帐号密码是admin/123456qwerty
2025年08月29日
5 阅读
0 评论
0 点赞
2025-08-29
X86 ubuntu设置合上盖子不休眠
在 Ubuntu 中设置合上笔记本盖子不休眠,可以通过修改电源管理设置实现。以下是具体步骤:打开设置:点击屏幕右上角的系统菜单,选择“设置”或“系统设置”。进入电源设置:在设置窗口中,找到“电源”或“电源管理”选项。修改合盖行为:找到“合上盖子时的行为”或类似选项(可能在“电源”或“节能”部分)。将“合上盖子”设置为“无操作”或“Do nothing”。在“交流电源”和“电池供电”两种模式下,分别检查和设置。使用命令行(可选):如果图形界面没有效果或需要更精确控制,可以编辑配置文件:打开终端,编辑 /etc/systemd/logind.conf 文件:sudo nano /etc/systemd/logind.conf找到以下行(如果没有,可以添加):HandleLidSwitch=ignore HandleLidSwitchExternalPower=ignore HandleLidSwitchDocked=ignoreHandleLidSwitch:控制电池供电时合盖行为。HandleLidSwitchExternalPower:控制接通电源时合盖行为。HandleLidSwitchDocked:控制外接显示器时的合盖行为。将值设置为 ignore 表示合盖不休眠。保存文件后,运行以下命令使更改生效:sudo systemctl restart systemd-logind验证设置:合上盖子,检查系统是否休眠。如果不休眠,设置成功。注意:如果使用的是 GNOME 桌面环境,可能需要安装 dconf-editor 来进一步调整:sudo apt install dconf-editor然后打开 dconf-editor,导航到 /org/gnome/settings-daemon/plugins/power/,将 lid-close-ac-action 和 lid-close-battery-action 设置为 nothing。某些笔记本型号可能需要额外的内核参数或固件更新,确保系统是最新的:sudo apt update && sudo apt upgrade如果仍有问题,可以检查硬件兼容性或在 X 上搜索相关帖子以获取社区帮助。需要我帮你搜索具体的 X 帖子或进一步调试吗?
2025年08月29日
2 阅读
0 评论
0 点赞
2025-08-29
扩展空间脚本优化记录
我帮你修改脚本,将 DISK="/dev/mmcblk0" 和 ROOT_PARTITION="${DISK}p5" 替换为通过 findmnt -no SOURCE / 动态获取根分区设备路径,同时保持其他功能不变。以下是完整的修改后脚本代码:#!/bin/bash # 日志文件 LOG_FILE="/var/log/expand_root_and_swapfile.log" exec > >(tee -a "$LOG_FILE") 2>&1 echo "===== 根分区扩展与交换文件创建脚本开始执行: $(date) =====" # 检查是否以 root 用户运行 if [ "$(id -u)" != "0" ]; then echo "错误:此脚本需要以 root 权限运行,请使用 sudo 或切换到 root 用户。" exit 1 fi # 检查必要工具是否安装(扩展分区和文件系统所需的工具) if ! command -v parted >/dev/null 2>&1; then echo "错误:parted 未安装,请先安装 parted(例如:apt install parted)。" exit 1 fi if ! command -v resize2fs >/dev/null 2>&1; then echo "错误:resize2fs 未安装,请先安装 e2fsprogs(例如:apt install e2fsprogs)。" exit 1 fi if ! command -v expect >/dev/null 2>&1; then echo "错误:expect 未安装,请先安装 expect(例如:apt install expect)。" exit 1 fi if ! command -v partprobe >/dev/null 2>&1; then echo "错误:partprobe 未安装,请先安装 parted(例如:apt install parted)。" exit 1 fi if ! command -v fsck >/dev/null 2>&1; then echo "错误:fsck 未安装,请先安装 e2fsprogs(例如:apt install e2fsprogs)。" exit 1 fi # 定义交换文件和大小 SWAP_FILE="/swapfile" SWAP_SIZE_MB=512 # 通过 findmnt 获取根分区设备路径 ROOT_PARTITION=$(findmnt -no SOURCE /) if [ -z "$ROOT_PARTITION" ]; then echo "错误:无法通过 findmnt 获取根分区设备路径,请检查系统配置。" exit 1 fi # 从根分区路径推导磁盘设备路径(例如 /dev/mmcblk0p5 -> /dev/mmcblk0) DISK=$(echo "$ROOT_PARTITION" | sed -r 's/p[0-9]+$//') if [ -z "$DISK" ]; then echo "错误:无法从根分区路径 $ROOT_PARTITION 推导磁盘设备路径。" exit 1 fi # 检查磁盘是否存在 if [ ! -b "$DISK" ]; then echo "错误:磁盘 $DISK 不存在,请检查设备名称。" exit 1 fi # 检查根分区是否存在 if [ ! -b "$ROOT_PARTITION" ]; then echo "错误:根分区 $ROOT_PARTITION 不存在,请检查分区编号。" exit 1 fi # 检查根分区是否挂载 MOUNT_POINT=$(mount | grep "$ROOT_PARTITION" | awk '{print $3}') if [ -z "$MOUNT_POINT" ]; then echo "错误:根分区 $ROOT_PARTITION 未挂载,请确保分区已挂载。" exit 1 fi echo "根分区 $ROOT_PARTITION 已挂载到 $MOUNT_POINT,可以在线扩展。" # 显示分区表和可用空间 echo "正在检查磁盘 $DISK 的分区布局..." parted -s "$DISK" unit MB print free # 验证根分区是否为最后一个分区且后面有可用空间 FREE_SPACE=$(parted -s "$DISK" unit MB print free | grep -A1 "Number.*Start.*End.*Size" | tail -n 1 | grep "Free Space") if [ -z "$FREE_SPACE" ]; then echo "错误:根分区 $ROOT_PARTITION 后面没有可用空间,无法扩展。" exit 1 fi # 使用 expect 自动运行 parted,模拟手动步骤:print free -> Fix -> resizepart [分区号] 100% -> quit PARTITION_NUMBER=$(echo "$ROOT_PARTITION" | grep -o '[0-9]\+$') if [ -z "$PARTITION_NUMBER" ]; then echo "错误:无法从根分区路径 $ROOT_PARTITION 提取分区号。" exit 1 fi echo "正在运行 parted,自动输入 'Fix' 并调整根分区大小..." /usr/bin/expect <<EOF set timeout 30 spawn parted $DISK expect "(parted)" { send "print free\r" expect { "Fix/Ignore?" { send "Fix\r" expect "(parted)" { send "resizepart $PARTITION_NUMBER 100%\r" expect "(parted)" { send "quit\r" } } } "(parted)" { send "resizepart $PARTITION_NUMBER 100%\r" expect "(parted)" { send "quit\r" } } timeout { send_user "错误:parted 交互超时\n" exit 1 } } } expect eof EOF if [ $? -ne 0 ]; then echo "错误:parted 执行失败,请检查日志 $LOG_FILE。" exit 1 fi # 通知内核更新分区表 echo "正在通知内核更新分区表..." partprobe "$DISK" || { echo "错误:partprobe 失败,尝试使用 blockdev 同步..." blockdev --rereadpt "$DISK" || { echo "错误:分区表同步失败,请检查日志 $LOG_FILE。" exit 1 } } # 显示调整后的分区表 echo "根分区调整完成,以下是新的分区布局:" parted -s "$DISK" unit MB print free # 检查文件系统一致性(非破坏性检查) echo "正在检查文件系统一致性(非破坏性)..." fsck -n "$ROOT_PARTITION" || { echo "警告:文件系统检查发现问题,建议手动运行 'e2fsck -f $ROOT_PARTITION' 修复(需卸载或重启到单用户模式)。" echo "继续尝试在线扩展文件系统..." } # 执行文件系统扩展 echo "正在扩展根分区文件系统..." resize2fs "$ROOT_PARTITION" || { echo "错误:文件系统扩展失败,请检查日志 $LOG_FILE。" echo "可能需要手动运行 'e2fsck -f $ROOT_PARTITION' 和 'resize2fs $ROOT_PARTITION'。" exit 1 } # 显示扩展后的文件系统信息 echo "根分区文件系统扩展完成!以下是新的文件系统信息:" df -h | grep "$ROOT_PARTITION" # 检查交换文件相关工具和空间 echo "正在检查交换文件创建所需的工具和空间..." if ! command -v mkswap >/dev/null 2>&1; then echo "错误:mkswap 未安装,请先安装 util-linux(例如:apt install util-linux)。" exit 1 fi # 检查扩展后根文件系统可用空间是否足够创建 512MB 交换文件 FREE_SPACE_MB=$(df --block-size=1M "$MOUNT_POINT" | tail -n 1 | awk '{print $4}') if [ -z "$FREE_SPACE_MB" ]; then echo "错误:无法获取扩展后根文件系统可用空间,请检查 df 命令输出。" exit 1 fi if [ "$FREE_SPACE_MB" -lt "$SWAP_SIZE_MB" ]; then echo "错误:扩展后根文件系统可用空间 ($FREE_SPACE_MB MB) 小于所需的交换文件大小 ($SWAP_SIZE_MB MB)。" exit 1 fi echo "扩展后根文件系统可用空间为 $FREE_SPACE_MB MB,足以创建 $SWAP_SIZE_MB MB 交换文件。" # 创建交换文件 echo "正在创建 $SWAP_SIZE_MB MB 交换文件 ($SWAP_FILE)..." if [ -f "$SWAP_FILE" ]; then echo "交换文件 $SWAP_FILE 已存在,跳过创建。" else dd if=/dev/zero of="$SWAP_FILE" bs=1M count="$SWAP_SIZE_MB" status=progress || { echo "错误:创建交换文件失败,请检查日志 $LOG_FILE。" exit 1 } chmod 600 "$SWAP_FILE" || { echo "错误:设置交换文件权限失败,请检查日志 $LOG_FILE。" exit 1 } mkswap "$SWAP_FILE" || { echo "错误:格式化交换文件失败,请检查日志 $LOG_FILE。" exit 1 } fi # 启用交换文件 echo "正在启用交换文件..." swapon "$SWAP_FILE" || { echo "错误:启用交换文件失败,请检查日志 $LOG_FILE。" exit 1 } # 添加交换文件到 fstab echo "正在将交换文件添加到 /etc/fstab..." if ! grep -q "$SWAP_FILE" /etc/fstab; then echo "$SWAP_FILE none swap sw 0 0" >> /etc/fstab echo "交换文件已添加到 /etc/fstab。" else echo "交换文件已在 /etc/fstab 中,无需重复添加。" fi # 显示交换空间状态 echo "交换文件创建并启用完成!以下是交换空间信息:" swapon --show # 禁用脚本以防止下次启动重复执行 systemctl disable auto-expand-root.service echo "脚本已完成并禁用自动执行,避免重复运行。" echo "===== 根分区扩展与交换文件创建脚本执行完成: $(date) ====="修改说明动态获取根分区:使用 ROOT_PARTITION=$(findmnt -no SOURCE /) 获取根分区的设备路径(如 /dev/mmcblk0p5)。添加了错误检查,确保 findmnt 能正确返回根分区路径。推导磁盘设备路径:从根分区路径(如 /dev/mmcblk0p5)通过 sed -r 's/p[0-9]+$//' 提取磁盘设备路径(如 /dev/mmcblk0)。添加了错误检查,确保能正确提取磁盘路径。动态获取分区号:在 parted 的 resizepart 命令中,使用 PARTITION_NUMBER=$(echo "$ROOT_PARTITION" | grep -o '[0-9]\+$') 提取分区号(如 5),以动态调整根分区。添加了错误检查,确保能正确提取分区号。其他部分保持不变:保留了原脚本的所有功能,包括日志记录、分区扩展、文件系统扩展、交换文件创建等。错误提示和日志输出中的设备路径已更新为动态获取的 $ROOT_PARTITION 和 $DISK。注意事项脚本假设根分区是最后一个分区且后面有可用空间。如果实际情况不同,可能需要进一步调整逻辑。确保 findmnt 命令可用(通常包含在 util-linux 包中)。如果根分区路径格式非标准(如不是 /dev/mmcblk0pX 形式),sed 提取磁盘路径的逻辑可能需要调整。原脚本:#!/bin/bash # 日志文件 LOG_FILE="/var/log/expand_root_and_swapfile.log" exec > >(tee -a "$LOG_FILE") 2>&1 echo "===== 根分区扩展与交换文件创建脚本开始执行: $(date) =====" # 检查是否以 root 用户运行 if [ "$(id -u)" != "0" ]; then echo "错误:此脚本需要以 root 权限运行,请使用 sudo 或切换到 root 用户。" exit 1 fi # 检查必要工具是否安装(扩展分区和文件系统所需的工具) if ! command -v parted >/dev/null 2>&1; then echo "错误:parted 未安装,请先安装 parted(例如:apt install parted)。" exit 1 fi if ! command -v resize2fs >/dev/null 2>&1; then echo "错误:resize2fs 未安装,请先安装 e2fsprogs(例如:apt install e2fsprogs)。" exit 1 fi if ! command -v expect >/dev/null 2>&1; then echo "错误:expect 未安装,请先安装 expect(例如:apt install expect)。" exit 1 fi if ! command -v partprobe >/dev/null 2>&1; then echo "错误:partprobe 未安装,请先安装 parted(例如:apt install parted)。" exit 1 fi if ! command -v fsck >/dev/null 2>&1; then echo "错误:fsck 未安装,请先安装 e2fsprogs(例如:apt install e2fsprogs)。" exit 1 fi # 定义目标磁盘、分区和交换文件 DISK="/dev/mmcblk0" ROOT_PARTITION="${DISK}p5" SWAP_FILE="/swapfile" SWAP_SIZE_MB=512 # 检查磁盘是否存在 if [ ! -b "$DISK" ]; then echo "错误:磁盘 $DISK 不存在,请检查设备名称。" exit 1 fi # 检查根分区是否存在 if [ ! -b "$ROOT_PARTITION" ]; then echo "错误:根分区 $ROOT_PARTITION 不存在,请检查分区编号。" exit 1 fi # 检查根分区是否挂载 MOUNT_POINT=$(mount | grep "$ROOT_PARTITION" | awk '{print $3}') if [ -z "$MOUNT_POINT" ]; then echo "错误:根分区 $ROOT_PARTITION 未挂载,请确保分区已挂载。" exit 1 fi echo "根分区 $ROOT_PARTITION 已挂载到 $MOUNT_POINT,可以在线扩展。" # 显示分区表和可用空间 echo "正在检查磁盘 $DISK 的分区布局..." parted -s "$DISK" unit MB print free # 验证根分区是否为最后一个分区且后面有可用空间 FREE_SPACE=$(parted -s "$DISK" unit MB print free | grep -A1 "Number.*Start.*End.*Size" | tail -n 1 | grep "Free Space") if [ -z "$FREE_SPACE" ]; then echo "错误:根分区 $ROOT_PARTITION 后面没有可用空间,无法扩展。" exit 1 fi # 使用 expect 自动运行 parted,模拟手动步骤:print free -> Fix -> resizepart 5 100% -> quit echo "正在运行 parted,自动输入 'Fix' 并调整根分区大小..." /usr/bin/expect <<EOF set timeout 30 spawn parted $DISK expect "(parted)" { send "print free\r" expect { "Fix/Ignore?" { send "Fix\r" expect "(parted)" { send "resizepart 5 100%\r" expect "(parted)" { send "quit\r" } } } "(parted)" { send "resizepart 5 100%\r" expect "(parted)" { send "quit\r" } } timeout { send_user "错误:parted 交互超时\n" exit 1 } } } expect eof EOF if [ $? -ne 0 ]; then echo "错误:parted 执行失败,请检查日志 $LOG_FILE。" exit 1 fi # 通知内核更新分区表 echo "正在通知内核更新分区表..." partprobe "$DISK" || { echo "错误:partprobe 失败,尝试使用 blockdev 同步..." blockdev --rereadpt "$DISK" || { echo "错误:分区表同步失败,请检查日志 $LOG_FILE。" exit 1 } } # 显示调整后的分区表 echo "根分区调整完成,以下是新的分区布局:" parted -s "$DISK" unit MB print free # 检查文件系统一致性(非破坏性检查) echo "正在检查文件系统一致性(非破坏性)..." fsck -n "$ROOT_PARTITION" || { echo "警告:文件系统检查发现问题,建议手动运行 'e2fsck -f /dev/mmcblk0p5' 修复(需卸载或重启到单用户模式)。" echo "继续尝试在线扩展文件系统..." } # 执行文件系统扩展 echo "正在扩展根分区文件系统..." resize2fs "$ROOT_PARTITION" || { echo "错误:文件系统扩展失败,请检查日志 $LOG_FILE。" echo "可能需要手动运行 'e2fsck -f /dev/mmcblk0p5' 和 'resize2fs /dev/mmcblk0p5'。" exit 1 } # 显示扩展后的文件系统信息 echo "根分区文件系统扩展完成!以下是新的文件系统信息:" df -h | grep "$ROOT_PARTITION" # 检查交换文件相关工具和空间 echo "正在检查交换文件创建所需的工具和空间..." if ! command -v mkswap >/dev/null 2>&1; then echo "错误:mkswap 未安装,请先安装 util-linux(例如:apt install util-linux)。" exit 1 fi # 检查扩展后根文件系统可用空间是否足够创建 512MB 交换文件 FREE_SPACE_MB=$(df --block-size=1M "$MOUNT_POINT" | tail -n 1 | awk '{print $4}') if [ -z "$FREE_SPACE_MB" ]; then echo "错误:无法获取扩展后根文件系统可用空间,请检查 df 命令输出。" exit 1 fi if [ "$FREE_SPACE_MB" -lt "$SWAP_SIZE_MB" ]; then echo "错误:扩展后根文件系统可用空间 ($FREE_SPACE_MB MB) 小于所需的交换文件大小 ($SWAP_SIZE_MB MB)。" exit 1 fi echo "扩展后根文件系统可用空间为 $FREE_SPACE_MB MB,足以创建 $SWAP_SIZE_MB MB 交换文件。" # 创建交换文件 echo "正在创建 $SWAP_SIZE_MB MB 交换文件 ($SWAP_FILE)..." if [ -f "$SWAP_FILE" ]; then echo "交换文件 $SWAP_FILE 已存在,跳过创建。" else dd if=/dev/zero of="$SWAP_FILE" bs=1M count="$SWAP_SIZE_MB" status=progress || { echo "错误:创建交换文件失败,请检查日志 $LOG_FILE。" exit 1 } chmod 600 "$SWAP_FILE" || { echo "错误:设置交换文件权限失败,请检查日志 $LOG_FILE。" exit 1 } mkswap "$SWAP_FILE" || { echo "错误:格式化交换文件失败,请检查日志 $LOG_FILE。" exit 1 } fi # 启用交换文件 echo "正在启用交换文件..." swapon "$SWAP_FILE" || { echo "错误:启用交换文件失败,请检查日志 $LOG_FILE。" exit 1 } # 添加交换文件到 fstab echo "正在将交换文件添加到 /etc/fstab..." if ! grep -q "$SWAP_FILE" /etc/fstab; then echo "$SWAP_FILE none swap sw 0 0" >> /etc/fstab echo "交换文件已添加到 /etc/fstab。" else echo "交换文件已在 /etc/fstab 中,无需重复添加。" fi # 显示交换空间状态 echo "交换文件创建并启用完成!以下是交换空间信息:" swapon --show # 禁用脚本以防止下次启动重复执行 systemctl disable auto-expand-root.service echo "脚本已完成并禁用自动执行,避免重复运行。" echo "===== 根分区扩展与交换文件创建脚本执行完成: $(date) =====" 其中DISK="/dev/mmcblk0" ROOT_PARTITION="${DISK}p5"是固定的,能不能改成通过findmnt -no SOURCE /来获取,其它功能不变,输出完整脚本代码,中文回答
2025年08月29日
3 阅读
0 评论
0 点赞
2025-08-29
linux无损扩展根分区空间
要无损扩展 /dev/mmcblk2p5 分区(根分区 /)的空间,请按以下步骤操作:步骤 1:确认磁盘布局从 lsblk 输出可知:磁盘总大小:14.6G当前根分区 /dev/mmcblk2p5 大小:1.8G剩余未分配空间:约 12.7G(位于根分区之后)步骤 2:安装必要工具# 安装分区扩展工具(如未安装) apt update && apt install -y cloud-utils gdisk步骤 3:扩展分区使用 growpart 工具扩展分区到磁盘末尾:growpart /dev/mmcblk2 5步骤 4:调整文件系统大小直接扩展 ext4 文件系统以利用新增空间(无需卸载分区):resize2fs /dev/mmcblk2p5步骤 5:验证结果df -h /输出应显示根分区空间已扩展(例如从 1.8G 增加到接近 14G)。注意事项数据安全:虽然操作是无损的,但建议提前备份关键数据。电源稳定:操作过程中确保设备不断电。分区表类型:此方法适用于 GPT 或 MSDOS 分区表。嵌入式设备:如果设备使用自定义镜像,可能需要额外调整(如 fstab 或引导配置)。原理说明growpart:通过调整分区结束位置扩展分区(无需重启)。resize2fs:在线扩展 ext4 文件系统到分区新大小。如果遇到问题,可提供 /var/log/syslog 日志进一步排查。
2025年08月29日
2 阅读
0 评论
0 点赞
2025-08-29
空间不足时,解包修改后重新打包镜像
您提到在编译和修改 rootfs 分区时可能会遇到空间不足的问题。直接挂载镜像文件进行操作时,分区的大小是固定的,无法动态扩展。为了解决这个问题,您可以按照以下步骤在更大的空间中进行编译和修改,然后再将修改后的内容打包回镜像文件:1. 挂载镜像文件运行以下命令挂载镜像文件:# 创建挂载点目录 sudo mkdir -p /mnt/hd9901 # 使用 losetup 挂载镜像文件 sudo losetup -fP hd9901.img # 查找 loop 设备名(如 /dev/loop0) sudo losetup -a # 挂载分区(以 rootfs 分区为例) sudo mount /dev/loop0p5 /mnt/hd99012. 将 rootfs 分区的内容复制到临时目录运行以下命令将 rootfs 分区的内容复制到宿主机的临时目录中:# 创建临时目录 sudo mkdir -p /tmp/rootfs_temp # 使用 rsync 复制内容 sudo rsync -a /mnt/hd9901/ /tmp/rootfs_temp/3. 使用 chroot 环境进行编译和修改在临时目录中设置 chroot 环境,以便在类似目标系统的环境中进行编译和修改:# 示例:在 chroot 环境中安装软件包 sudo chroot /tmp/rootfs_temp mount -t proc proc /proc mount -t sysfs sys /sys mount -t devtmpfs dev /dev mount -t devpts pts /dev/pts # 在 chroot 环境中执行命令(如安装编译工具) apt update apt install -y build-essential # 退出 chroot 环境 exit4. 卸载镜像文件完成修改后,运行以下命令卸载镜像:sudo umount /mnt/hd9901 sudo losetup -d /dev/loop05. 重新打包镜像文件使用 mksquashfs 或 tar 命令将修改后的内容重新打包成镜像文件:# 确保镜像文件大小与原文件一致 dd if=/dev/zero of=hd9901_new.img bs=1M count=1944 # 使用 losetup 重新挂载新镜像文件 sudo losetup -fP hd9901_new.img # 查找新的 loop 设备名(如 /dev/loop1) sudo losetup -a # 将原镜像的分区表复制到新镜像 sudo gdisk /dev/loop0在 gdisk 交互界面中,输入 r 进入恢复菜单,然后选择 d 恢复分区表,最后选择 w 写入并退出。6. 验证镜像文件使用 gdisk 或 fdisk 验证新镜像的分区表和内容:sudo gdisk -l hd9901_new.img注意事项数据备份:在重新打包前,确保已备份重要数据。镜像大小:确保新镜像文件大小与原文件一致,以避免数据丢失。分区表:在重新打包时,确保正确复制原镜像的分区表。如果问题仍未解决,请提供以下信息以便进一步诊断:lsblk fdisk -l hd9901.img根据您的描述,您已经完成了对 /dev/loop0p5(即 rootfs 分区)的修改,并希望将修改后的内容重新打包回镜像文件。以下是详细的后续操作步骤:1. 挂载新镜像文件1.1 创建与原镜像文件大小相同的新镜像文件# 确保新镜像文件大小与原文件一致(例如 1944MB) dd if=/dev/zero of=hd9901_new.img bs=1M count=19441.2 使用 losetup 挂载新镜像文件sudo losetup -fP hd9901_new.img1.3 查找新的 loop 设备名sudo losetup -a假设新镜像文件的 loop 设备名为 /dev/loop1。2. 复制分区表2.1 使用 gdisk 复制原镜像的分区表sudo gdisk /dev/loop0在 gdisk 交互界面中:输入 r 进入恢复菜单。选择 d 恢复分区表。选择 w 写入并退出。2.2 将分区表写入新镜像文件sudo gdisk /dev/loop1在 gdisk 交互界面中:输入 r 进入恢复菜单。选择 d 恢复分区表。选择 w 写入并退出。3. 挂载新镜像的 rootfs 分区3.1 查找新镜像的 rootfs 分区设备名sudo losetup -a假设新镜像的 rootfs 分区设备名为 /dev/loop1p5。3.2 挂载新镜像的 rootfs 分区sudo mkdir -p /mnt/hd9901_new sudo mount /dev/loop1p5 /mnt/hd9901_new4. 将修改后的内容复制回新镜像的 rootfs 分区4.1 使用 rsync 同步内容sudo rsync -a /tmp/rootfs_temp/ /mnt/hd9901_new/5. 卸载镜像文件5.1 卸载新镜像的 rootfs 分区sudo umount /mnt/hd9901_new5.2 解除 loop 设备与新镜像文件的关联sudo losetup -d /dev/loop16. 验证新镜像文件6.1 检查分区表sudo gdisk -l hd9901_new.img6.2 检查 rootfs 分区内容# 重新挂载新镜像文件 sudo losetup -fP hd9901_new.img sudo mount /dev/loop1p5 /mnt/hd9901_new # 列出分区内容 ls /mnt/hd9901_new # 卸载新镜像文件 sudo umount /mnt/hd9901_new sudo losetup -d /dev/loop1注意事项数据备份:在重新打包前,确保已备份重要数据。镜像大小:确保新镜像文件大小与原文件一致,以避免数据丢失。分区表:在重新打包时,确保正确复制原镜像的分区表。如果问题仍未解决,请提供以下信息以便进一步诊断:lsblk fdisk -l hd9901_new.img
2025年08月29日
3 阅读
0 评论
0 点赞
1
2
3
4