由于squahsfs的一些优点,嵌入系统常常直接使用squashfs作为initrd挂载到/dev/ram,作为rootfs。这里对常见的一些问题进行一些分析。

1. kernel启动出现错误

RAMDISK: Couldn't find valid RAM disk image starting at 0.

kernel没有找到文件系统,不能mount到/dev/ram。这不管是squanshfs,还是其他的文件系统作为rootfs,都可能出现。一般是bootloader指定载入rootfs的内存地址和kernel的命令行initrd参数指定的内存地址不符。这样kernel找不到superblock,报出这样的错误。

2. kernel已经找到文件系统,但在挂载是出现错误

squashfs: SQUASHFS error: unable to read xattr id index table

一个squashfs文件系统最多由九个部分组成,按字节对齐方式组合。如下所示:

---------------
 |  superblock  |
 |---------------|
 |  compression  |
 |    options    |
 |---------------|
 |  datablocks   |
 |  & fragments  |
 |---------------|
 |  inode table |
 |---------------|
 |   directory |
 |     table     |
 |---------------|
 |   fragment |
 |    table      |
 |---------------|
 |    export     |
 |    table      |
 |---------------|
 |    uid/gid |
 |  lookup table |
 |---------------|
 |     xattr     |
 |     table |
  ---------------

可以看到xattr(扩展属性)表处于整个文件系统的最末尾。出现错误无法读取扩展属性表一般是因为载入的initrd不完整。可能由于bootloader的load指令引起。比如bootloader的-max参数不对,或者有的bootloader的-max参数有缺省值,如果不显式指定的话,可能导致读入的文件不完整。所以最好指定。

load -raw -nz -addr=0x00680000 -offset=0x600000 -max=100000000 usbdisk0:rootfs.squashfs

再一个也有可能是kernel的initrd的大小参数不正确。第二个参数指定initrd的大小。

initrd=0x00680000,100000000

3. 挂载时出现

SQUASHFS error: zlib decompression failed, data probably corrupt
SQUASHFS error: squashfs_read_data failed to read block 0x97eb83
SQUASHFS error: Unable to read fragment cache entry [97eb83]

根据squashfs使用的压缩方法不用,这里可能出现zlib,xz或者其他的压缩方式解压缩失败。出现这种错误一般是因为文件系统数据被破坏了。有可能是因为保存squashfs的介质,比如flash损坏了,自然载入的数据不正确。还有一种情况是,bootloader用load命令把squashfs载入内存时选择的地址不对。squashfs文件系统载入的内存不能和bootloader自身使用的内存地址范围有交叉。还有后面载入内核,以及其他一些操作,比如载入dtb,都有可覆盖squashfs载入的数据导致出现类似的错误。有时候这种错误很隐蔽,系统启动挂载时不出现任何错误,而在系统运行中某个时候才出现。因为你不知道squashfs哪一部分数据被破坏,很可能mount时用到的数据没有被破坏。而直到使用到被破坏数据时才出现这种错误。

嵌入系统squashfs挂载常见问题总结的更多相关文章

  1. Saiku嵌入系统使用时传参数访问saiku(十六)

    Saiku嵌入系统使用时传参数访问saiku Saiku通过iframe嵌入其他系统使用时,我们可以设定参数信息,然后根据url中参数对结果进行筛选哦. 这里我们实现的是根据日期字段进行范围查询,UR ...

  2. Ubuntu 16.04 系统无法挂载u盘的问题

    Ubuntu系统无法挂载U盘设备,提示错误为:mount:未知文件系统类型“exfat”.这是因为Ubuntu默认情况下是不允许挂载U盘的,想在Ubuntu系统下挂载U盘,就要用下面的方法了. sud ...

  3. linux系统usb挂载

    本次例程的环境是在FC6下,通过终端操作的. 注意要挂载U盘需要有管理员的权限. 切换成管理员,输入: su root 然后输入管理员密码,进行密码认证: 成功后,先在 /mnt 下建立一个名叫USB ...

  4. linux系统磁盘挂载

    1.查看系统磁盘挂载情况 fdisk -l 2.格式化磁盘 mkfs -t ext3 /dev/sdb 3.挂在磁盘 mount /dev/sdb /disk2 4.查看磁盘挂载情况 df -h 5. ...

  5. Raid5之后安装系统,挂载磁盘

    配置RAID5 略 2.U盘安装centos系统(我的版本是centos7.0) 这一步骤网上很多,可以参考这篇:http://jingyan.baidu.com/article/359911f571 ...

  6. Ubuntu双系统无法挂载Windows10 硬盘的解决方法

    我的电脑是在Windows 10下安装的Ubuntu 14.04双系统,今天进入Ubuntu系统访问Windows 10 磁盘,出现如下错误: Error mounting /dev/sda1 at ...

  7. Linux 系统磁盘挂载信息文件

    设置文件系统挂载信息的文件(etc/fstab),使得开机能够自动挂载磁盘分区 文件系统挂载 方法一: 直接挂在,临时生效 # 格式化系统(没有格式化就没有文件系统,放不了数据) dd if=/dev ...

  8. 树莓派Raspbian系统格式化挂载硬盘

    1.查看树莓派系统挂载的储存设备 使用工具查看系统识别到的硬盘设备,命令: fdisk -l /dev/sda 和 /dev/sdb  分别是两块硬盘. 2.修改硬盘分区 Linux和windows一 ...

  9. python读取ubuntu系统磁盘挂载情况

    磁盘挂载 利用df -h  的命令 此功能主要实现了python 命令行执行函数进行解析df 返回的数据   代码如下 : # liunx 系统获取 磁盘挂载的情况 代码 #!/usr/bin/pyt ...

随机推荐

  1. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  2. poj2828 Buy ticket

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  3. JDK安装与配置详细图文教程

    目的:本人健忘,以后难免会重装系统啥的,软件卸了装是常有的事,特此写此详细教程,一是方便自己以后重装的时候可以看看:二是如果有某位初学者有幸光临,也可以给一点参照.下面我会从JDK的下载.安装.环境变 ...

  4. java通过freemarker导出包含富文本图片的word文档

    废话不多说,进入正题! 本文重点在于:对富文本图片的导出(基础的freemarker+word模板导出这里不做详细解说哈) 参考文章:http://www.cnblogs.com/liaofeifig ...

  5. java多线程sleep和wait方法的区别

    分别创建了三个类,一个测试类,两个线程类实现Runnable接口. 当有notify()唤醒线程时,执行的结果如下: 当把TestSleepaWait.class.notify();语句注释后,即没有 ...

  6. 多路复用(select、epoll)实现tcp服务

    -------------------------------多路复用的服务器(select)------------------------------- 网络通信被Unix系统抽象为文件的读写,通 ...

  7. 关于用VMware克隆linux系统后,无法联网找不到eth0网卡的问题

    当使用克隆后的虚拟机时发现系统中的网卡eth0没有了,使用ifconfig -a会发现只有eth1.因为系统是克隆过来的,原有的eth0以及ip地址都是原先网卡的,VMware发现已经被占用,就会创建 ...

  8. 如何用比较快速的方法掌握Spring的核心——依赖注入,Java web轻量级开发面试教程 读书笔记

    我们知道,Java方面的高级程序员一定得掌握Spring的技能,其中包括Spring 依赖注入(IOC),面向切面(AOP),和数据库的整合(比如和Hibernate整合或声明式事务等)以及Sprin ...

  9. Linux-ps命令(7)

    名称:ps(process status) 使用权限:所有使用者说明:显示瞬间进程 (process) 的动态 示例: 比如输入ps查看进程,如下图: 其中输出状态栏参数: PID 该 process ...

  10. JavaScript学习日志(六):事件

    这篇随笔,深恶痛绝,敲到快结束的时候,凌晨00:19,突然闪退,也不知道是Mac的原因还是chrome的原因,重新打开的时候,以为自动保存有效果,心想没关系,结果他么的只保存了四分之一,WTF?!!! ...