Linux基础 – 在内存中使用chroot修复eMMC
概述
本教程将介绍如何在Linux系统中,使用chroot
在内存中构建一个临时系统,并在不依赖原有系统的情况下修复eMMC(如/dev/mmcblk2
)磁盘。该方法适用于嵌入式系统修复、磁盘清理以及离线维护操作。
为什么选择chroot
chroot
(Change Root)命令用于更改当前进程或其子进程的根目录。通过将根目录切换到内存中的临时系统,我们可以安全地卸载和修复原有的磁盘(如eMMC),而不会干扰当前系统。
环境准备
- Linux操作系统,支持
chroot
命令。 - 足够的内存空间(根据临时系统大小确定)。
- 目标磁盘:eMMC(如
/dev/mmcblk2
)。
搭建内存中的临时系统
1. 创建临时根文件系统
mkdir -p /tmp/newsys/{bin,lib,lib64,dev,proc,sys}
2. 复制必要的二进制和库
cp /bin/bash /tmp/newsys/bin/
cp /bin/busybox /tmp/newsys/bin/ldd /bin/bash
ldd /bin/busyboxcp -r /lib/x86_64-linux-gnu/* /tmp/newsys/lib/
cp -r /lib64/* /tmp/newsys/lib64/
3. 创建设备节点
mknod -m 666 /tmp/newsys/dev/null c 1 3
mknod -m 666 /tmp/newsys/dev/zero c 1 5
mknod -m 666 /tmp/newsys/dev/tty c 5 0
mknod -m 666 /tmp/newsys/dev/random c 1 8
mknod -m 666 /tmp/newsys/dev/urandom c 1 9
4. 挂载 /proc, /sys, /dev 到新根目录
mount --bind /proc /tmp/newsys/proc
mount --bind /sys /tmp/newsys/sys
mount --bind /dev /tmp/newsys/dev
5. 使用 chroot 进入临时系统
chroot /tmp/newsys /bin/bash
在chroot中修复eMMC
1. 确保eMMC未被占用
umount /dev/mmcblk2
2. 修复或格式化eMMC
fsck.ext4 /dev/mmcblk2p1
mkfs.ext4 /dev/mmcblk2p1
退出chroot并清理
exit
umount /tmp/newsys/proc
umount /tmp/newsys/sys
umount /tmp/newsys/dev
rm -rf /tmp/newsys
总结
通过在内存中搭建的临时系统,我们可以灵活地卸载和修复磁盘而不影响现有系统。此方法安全、快速,适用于嵌入式设备维护与故障排查。