BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1.4) built-in she1l (ash) Enter ‘help‘ for a list of built-

虚拟机启动ubuntu系统提示根文件系统报错

上次使用虚拟机中的ubuntu没有正常关机,直接断电,可能是报错的原因

 输入命令:exit,查看错误分区

fsck -y /dev/sda1 修复根文件系统

修复完成后,系统会出现filesystem has been Modified等类似的字样

输入exit,重启系统

Busybox创建nfs文件系统 1、解压busybox-1.19.4.tar.bz2 修改Makefilez中的ARCH和CROSS_COMPILE与本机的路径一致: CROSS_COMPILE ?= /opt/crosstool/bin/arm-s3c2410-linux-gnu- ... ARCH ?= arm 2、编译busybox。先make menuconfig,修改以下: Busybox Settings ---> Build Options ---> Build BusyBox as a static binary (no shared libs) //直接编译成静态库,省事点 (/opt/crosstool/bin/arm-s3c2410-linux-gnu-) Cross Compiler prefix //这里和Makefile里保持一致,应该写一处就行了 Installation Options ---> Don't use /usr //不用本机的目录 Shells ---> Choose your default shell (ash) ---> //这里选择shellash,应该是默认选中的 --- ash //把ash这档的选项全部选上 保存退出,直接make,make install。 3、用shell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。我是用root用户登陆的,直接创建了设备节点。 [root@Sure root-s3c2410]# vim makedir.sh #!/bin/sh echo "makeing rootdir" mkdir rootfs cd rootfs echo "makeing dir: bin dev etc lib proc sbin sys usr" mkdir bin dev etc lib proc sbin sys usr #8 dirs mkdir usr/bin usr/lib usr/sbin lib/modules #Don't use mknod, unless you run this Script as mknod -m 600 dev/console c 5 1 mknod -m 666 dev/null c 1 3 echo "making dir: mnt tmp var" mkdir mnt tmp var chmod 1777 tmp mkdir mnt/etc mnt/jiffs2 mnt/yaffs mnt/data mnt/temp mkdir var/lib var/lock var/log var/run var/tmp chmod 1777 var/tmp echo "making dir: home root boot" mkdir home root boot echo "done" 执行这个sh: [root@Sure root-s3c2410]# sh makedir.sh 创建出一个主文件夹rootfs,里面有一批文件: [root@Sure rootfs]# ls bin boot dev etc home lib mnt proc root sbin sys tmp usr var 4、把busybox源码目录下的etc的内容拷贝到这里的etc下 [root@Sure rootfs]# cd etc/ [root@Sure etc]# cp -a /home/jacky/busybox-1.11.1/examples/bootfloppy/etc/* ./ 5、修改拷贝过来的profile文件 [root@Sure etc]# vim profile # /etc/profile: system-wide .profile file for the Bourne shells echo "Processing /etc/profile" # no-op # Set search library path echo " Set search library path" export LD_LIBRARY_PATH=/lib:/usr/lib # Set user path echo " Set user path" PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH # Set PS1 echo " Set PS1" HOSTNAME=`/bin/hostname` # 此处让shell提示符显示host名称的。是`,不是’,要注意 # 会在进入根系统后显示Jacky export PS1="\\e[32m[$USER@$HOSTNAME \\w\\a]\\$\\e[00;37m " # 此处\\e[32m是让后面的“[$USER@$HOSTNAME \\w\\a]”显示为绿色 # \\e[00是关闭效果 # \\e[05是闪烁 # 37m是让后面的显示为白色 # 多个命令可以;号隔开 echo "All done!" echo 6、修改初始化文件inittab和fstab [root@Sure etc]# vim inittab ::sysinit:/etc/init.d/rcS ::respawn:-/bin/sh ::restart:/sbin/init tty2::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a -r ::shutdown:/bin/umount -a -r ::shutdown:/sbin/swapoff –a [root@Sure etc]# vim fstab proc /proc proc defaults 0 0 none /tmp ramfs defaults 0 0 mdev /dev ramfs defaults 0 0 sysfs /sys sysfs defaults 0 0 7、修改初始化的脚本文件init.d/rcS [root@Sure etc]# vim init.d/rcS #! /bin/sh echo "Processing etc/init.d/rc.S" #hostname ${HOSTNAME} echo " Mount all" /bin/mount -a echo " Start mdev...." /bin/echo /sbin/mdev > proc/sys/kernel/hotplug mdev -s echo "****************************************************" echo " RootFS by NFS, s3c2410" echo " Created by Jacky Xu @ 2008.7.13" echo " Enjoy it!!!" echo "****************************************************" echo 8、创建一个空的mdev.conf文件,在挂载根文件系统时会用到的 [root@Sure etc]# touch mdev.conf 9、从本机拷贝passwd、shadow、group文件。 [root@Sure etc]# cp /etc/passwd . [root@Sure etc]# cp /etc/shadow . [root@Sure etc]# cp /etc/group . 修改passwd文件,把第一行和最后一行的bash修改成ash10、把busybox默认安装目录中的文件全部复制到这里的rootfs中。会发现多了linuxrc -> bin/busybox文件,这是挂载文件系统需要执行的。 [root@Sure etc]# cd .. [root@Sure rootfs]# cp -Rfv /home/jacky/busybox-1.11.1/_install/ ./ OK,以上用busybox创建了一个基本的文件系统。
<think>嗯,用户现在遇到了一个启动问题,显示BusyBoxinitramfs环境,提示没有空间和找不到实时文件系统。我需要先分析可能的原因,然后给出解决方案。 首先,用户可能在启动时遇到磁盘空间不足的问题,导致无法加载根文件系统。可能的原因包括磁盘空间满、文件系统损坏或者启动配置错误。另外,用户提到wget写入失败,可能是在initramfs中尝试下载文件时空间不足,但这可能只是表象,根本问题还是磁盘空间或文件系统错误。 接下来,我需要分步骤引导用户解决。首先检查磁盘空间,但因为用户已经在initramfs环境下,可能需要手动修复。可能需要检查文件系统错误,使用fsck命令,然后尝试退出initramfs或者重新生成initramfs镜像。如果空间确实不足,可能需要清理日志或临时文件。此外,还要考虑引导参数是否正确,或者是否硬件问题导致找不到根设备。 需要确保用户理解每一步的操作,尤其是涉及文件系统修复的命令,避免误操作导致数据丢失。同时,要考虑用户可能对命令行操作不熟悉,所以指令要尽量详细,并给出预防措施,比如备份数据。最后,如果问题依旧,建议用户检查硬件或重新安装系统。还要注意用户使用的是Ubuntu,所以相关命令要符合其系统环境。</think>以下是为您整理的 **initramfs环境报错 "No space left on device"** 的完整解决方案: --- ### **问题根源分析** 当系统启动进入 `(initramfs)` 终端并提示 **"No space left on device"** 时,通常由以下原因导致: 1. **磁盘空间耗尽**:根分区 `/` 或 `/boot` 分区已满(常见于长期运行的服务器或小容量根分区) 2. **文件系统损坏**:`ext4` 等文件系统的元数据错误,导致无法正确挂载 3. **initramfs镜像问题**:生成的 initramfs 镜像过大,超出 `/boot` 分区容量 4. **硬件故障**:存储介质损坏(概率较低) --- ### **应急处理步骤** #### **步骤 1:检查磁盘空间** 在 `(initramfs)` 提示符下执行: ```bash df -h # 查看各分区使用率 lsblk # 确认根分区挂载点是否为 / ``` *若发现 `/` 或 `/boot` 显示 100% 使用率,进入步骤 2* --- #### **步骤 2:手动清理空间** ```bash # 进入根文件系统读写模式(默认可能以只读挂载) mount -o remount,rw / # 清理旧内核(适用于/boot分区满) ls /boot/ # 查看旧内核文件(例如:vmlinuz-5.15.0-76-generic) rm /boot/*旧内核相关文件* # 保留最新2个内核即可 # 清理日志文件(适用于/var/log占满) rm -rf /var/log/*.gz # 删除已压缩日志 echo "" > /var/log/syslog # 清空当前日志 # 清理apt缓存 rm -rf /var/cache/apt/archives/*.deb ``` --- #### **步骤 3:修复文件系统** ```bash # 对根分区执行fsck检查(假设根分区为/dev/sda1) fsck -y /dev/sda1 # 若发现"Superblock errors",尝试备用超级块 fsck -b 32768 /dev/sda1 # 使用备份超级块修复 ``` --- #### **步骤 4:重建initramfs** ```bash # 退出initramfs环境后操作(或使用Live CD) mount /dev/sda1 /mnt # 挂载根分区 chroot /mnt # 切换根环境 # 清理旧initramfs rm /boot/initrd.img-* # 重新生成(适配当前内核版本) update-initramfs -c -k $(uname -r) update-grub # 更新GRUB配置 ``` --- ### **预防措施** | **场景** | **解决方案** | |------------------------|-----------------------------------------| | 自动清理旧内核 | `sudo apt autoremove --purge` | | 监控磁盘空间 | 配置 `cron` 任务定期运行 `df -h` | | 日志轮转 | 修改 `/etc/logrotate.conf` 限制日志大小 | | 分离/boot分区 | 分配至少 1GB 专用空间 | --- ### **扩展诊断技巧** 1. **检查inode使用**: ```bash df -i # 若100%则表示inode耗尽(常见于小文件过多) find / -xdev -type f -size +100M -exec ls -lh {} \; # 查找大文件 ``` 2. **Live CD修复**: ```bash # 使用Ubuntu安装U盘启动 → Try Ubuntu → 打开终端 sudo fsck /dev/sda1 # 离线修复更安全 ``` --- ### **关键报错对照表** | **报错信息** | **对应解决方案** | |-------------------------------------|---------------------------| | "wget: short write" | 清理磁盘空间 + 检查网络连接 | | "Unable to find live file system" | 修复GRUB或重装引导器 | | "Input/output error" | 检查硬盘健康度(smartctl) | --- 请根据实际情况选择操作步骤。若问题仍未解决,建议提供以下信息: ```bash dmesg | grep -i error # 查看内核错误日志 ls -lh /boot/ # 检查/boot目录详情 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码成行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值