raspberry pi 树莓派有两种安装方式,镜像安装和noobs安装。入门用户通常按照官方教程选择简单的noobs安装方式,一般顺序:格式化sd卡,拷贝noobs镜像,然后将sd卡插入树莓派卡槽,连接视频线,加电引导并配置。(说明树莓派固件功能还比较丰富,已经可以识别文件系统了)。

有一天我想备份一下16G的树莓派sd卡,于是掉电后取出sd,连在我的ubuntu 14.04系统上,这时候问题来了,ubuntu挂载不成功!fdisk命令只能看到树莓派的一个分区,而且无法挂载和读写!sd卡取下来再放回树莓派,又是好的,启动正常。查看树莓派分区如下:

1.树莓派分区分析:

p1分区为主分区,带有noobs镜像的16G的sd第一次引导启动后,被安装程序将分区压缩到了800m左右,这个大小刚好差不多也是noobs镜像的大小。

p2分区为扩展分区,占用了剩下的绝大部分空间中的14G。p5和p6是扩展分区中的两个逻辑分区,p5为boot分区,只有60m左右,p6就是整个raspbian的操作系统分区啦,14G左右。

p3分区为主分区,只有30m左右,非常小,里面储存了noobs安装过程中了几个配置文件。

因此,树莓派分区表是没有问题的,用dd命令打印出前512字节的MBR,对照分析一切正常,否则树莓派不可能启动。难道树莓派的debian7和ubuntu存在什么不兼容吗?

2.ubuntu错误打印:

把sd卡又重新插回ubuntu上,这次看了一下dmsg系统打印:

[ 338.332373] usb 1-1: new high-speed USB device number 5 using ehci-pci

[ 338.467637] usb 1-1: New USB device found, idVendor=14cd, idProduct=6700

[ 338.467651] usb 1-1: New USB device strings: Mfr=1, Product=3, SerialNumber=2

[ 338.467659] usb 1-1: Product: USB 2.0 SD/MMC READER

[ 338.467666] usb 1-1: Manufacturer: SDMMC M121

[ 338.467671] usb 1-1: SerialNumber: 834341670014

[ 338.469554] usb-storage 1-1:1.0: USB Mass Storage device detected

[ 338.469782] scsi host10: usb-storage 1-1:1.0

[ 339.470612] scsi 10:0:0:0: Direct-Access USB 2.0 SD/MMC Reader PQ: 0 ANSI: 0 CCS

[ 339.471488] sd 10:0:0:0: Attached scsi generic sg3 type 0

[ 339.472434] sd 10:0:0:0: [sdc] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)

[ 339.473384] sd 10:0:0:0: [sdc] Write Protect is off

[ 339.473396] sd 10:0:0:0: [sdc] Mode Sense: 03 00 00 00

[ 339.474175] sd 10:0:0:0: [sdc] No Caching mode page found

[ 339.474188] sd 10:0:0:0: [sdc] Assuming drive cache: write through

[ 339.493264] sdc: [CUMANA/ADFS] sdc1 [ADFS] sdc1

[ 339.497803] sd 10:0:0:0: [sdc] Attached SCSI removable disk

从高亮的第16行可以看出,ubuntu已经识别树莓派sd卡为sdc磁盘设备,但是只解析到了第一个分区sdc1,而且还打印了[CUMANA/ADFS],是什么鬼?搜索一下就明白了,原来ADFS是Risc OS的文件系统,可为什么明明是fat分区ubuntu却识别错了呢?

3.原因分析:

在英文网站一阵猛搜:

after NOOBS has done it's initial first-boot resizing, the MBR itself and the first partition never get modified. It's only files on the SETTINGS partition (mmcblk0p3) and all the logical partitions within the extended partition (mmcblk0p2) that get written to.

So even if a 'bad write' wiped out the entirety of mmcblk0p2 and mmcblk0p3, then NOOBS itself (stored on the mmcblk0p1 RECOVERY partition and never written to) would still be bootable, and allow you to install a fresh OS.

As already (partially) mentioned, on a post-initial-boot NOOBS card, there's both an MBR partition table at bytes 1-512 inclusive, and an ADFS partition table at bytes 513-10240 inclusive (the 9728 bytes of riscos-boot.bin ). Both partition tables are equally valid, with the MBR table describing the 'regular' linux partitions (Raspbian, OSMC, etc. as well as RECOVERY and SETTINGS), and the ADFS table describing the RISCOS partition (regardless of whether it's been installed yet or not). RISCOS doesn't understand MBR partitions, and so it always installs to a fixed location on the SD card.

And as the comment at https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/block/partitions/check.c#n56; explains, the kernel partition-checking code looks for the Acorn partition table before looking for the msdos (MBR) partition table. Hence the cause of the problem as initially reported :-S

原来,树莓派noobs安装第一次启动后,除了写入mbr主引导信息之外,还额外写入了RiscOS的引导程序riscos-boot.bin,两个同时有效,这样做是为了防止sd卡分区丢失无法启动,那么riscos/Acorn blob就还能工作和引导(树莓派真是用心良苦)。

但是,所有新的linux内核都有个问题就是会优先搜索和检测RiscOS blob,然后才是mbr引导分区。所以就用了错误的方式的识别sd卡导致其无法挂载。相关讨论链接原文:

4.解决办法:

1.第一个主分区偏移0xdd0的地方是risc引导信息,用dd命令填0覆盖;

2.找到分区的起始偏移地址,然后强制挂载,例如:

sudo mount /dev/sdc /mnt/ -o offset=$((385024*512))

3. 内核bug修复记录显示:

This bug was fixed in the package linux - 3.19.0-26.28

---------------

linux (3.19.0-26.28) vivid; urgency=low

[ Tim Gardner ]

* [Config] ACORN_PARTITION=n

- LP: #1453117

也就是说,代号vivid的ubuntu15.10已经修复了这个bug,最简单就是升级到15.10或者16.04吧!

linux内核不识别分区,ubuntu14.04无法识别树莓派SD卡问题相关推荐

  1. ubuntu14.04系统下对SD卡分区

    在ubuntu14.04系统下对SD卡进行分区分为3步: 注意:进行SD卡分区时,用户操作权限为root权限! (1) umount SD卡 查看SD卡挂载目录,一般在/media目录下: sudo ...

  2. fat32 linux 打包工具_一个方便的用于创建树莓派 SD 卡镜像的程序 | Linux 中国

    开始在 Mac 上使用 Raspberry Pi Imager.-- James Farrell(作者) 有多种购买树莓派的方法,根据你的购买渠道的不同,可能附带或不附带操作系统.要在树莓派上安装操作 ...

  3. linux dd克隆系统后,Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上

    linux系统如果想做备份还原,使用ghost的时候经常出现问题,后来发现可以直接使用dd命令完成硬盘的克隆和还原. 当拷贝完硬盘后,就可以拿这个硬盘放到其它设备上跑了. 也就是完成了"烧写 ...

  4. linux u盘格式exfat,Ubuntu14.04不支持U盘exfat格式该如何解决

    exfat是U盘的文件系统,很多系统都支持exfat格式的使用,但Ubuntu系统并不支持exfat格式,要如何处理呢?下面小编就给大家介绍下Ubuntu14.04不支持u盘exfat格式的解决方法, ...

  5. linux系统弹出鼠标,Ubuntu14.04及以上操作系统鼠标闪烁问题

    最近把操作系统更换为了Ubuntu,确一点都不惊讶地发现用新系统带来的一些"不方便"的问题.这两天为了在系统上 装上开发工具,调整到自己喜欢的形式,花费了一些时间,也费了一番工夫, ...

  6. linux qt搜狗输入法用不,Ubuntu14.04下搜狗输入法不支持Qt5环境

    问题环境确认: 系统平台Ubuntu14.04/ 安装了搜狗输入法/ 安装Qt5.4.1 一般自定义下载来Qt软件包,安装之后,都会有这个问题,在Qt环境下或Qt Creator下不能切换输入法,也不 ...

  7. linux读取树莓派SD卡,树莓派系统(Linux)SD卡存储设备的命令行使用

    本文介绍了SD卡读卡器通过usb连接到树莓派的挂载和卸载的操作,以及SD卡的格式化以及查看SD卡容量的命令行操作.mount umount mkfs.vfat df 当SD卡插入到树莓派板子上的时候/ ...

  8. 《树莓派学习指南(基于Linux)》——1.4 将Raspbian烧录到SD卡

    本节书摘来异步社区<树莓派学习指南(基于Linux)>一书中的第1章,第1.4节,作者:[英]Peter Membrey ,[澳]David Hows ,更多章节内容可以访问云栖社区&qu ...

  9. linux读取树莓派SD卡,如何修复及查看SD卡上树莓派系统(转)

    如何查看SD卡的分区,使用这个命令即可: sudo fdisk -l Device         Boot Start      End  Sectors  Size Id Type /dev/mm ...

  10. Linux 内核调试 二:ubuntu20.04安装qemu

    一.第一种方法 使用 apt-get install qemu 命令进行安装,安装过程如下: onlylove@ubuntu:~$ sudo apt-get install qemu Reading ...

最新文章

  1. lede旁路由作用_关于电容的旁路与去偶总结
  2. C#学习Error问题:“System.NullReferenceException:未将对象引用设置到对象的实例”
  3. vue class与style绑定
  4. 【转】C#中的命名空间namespace全解
  5. 78-spark2.2的编译
  6. [转帖]漫画趣解Linux内核
  7. 如何形象地理解 Python 中的 int 类型是任意精度这一概念?
  8. [bug解决] cannot import name ‘_validate_lengths‘ from ‘numpy.lib.arraypad‘
  9. 成为数据分析师需要具备的知识体系
  10. 微宝球型机器人功能_腾讯智能球型机器人专属app(微宝)
  11. springMvc--接受日期类型参数处理
  12. 2022美国大学生数学建模竞赛(美赛)思路代码
  13. 多媒体计算机对信息处理技术包括哪些,多媒体信息处理技术
  14. Android studio中assets文件更换之后不生效
  15. MPP(无主备)环境搭建
  16. php药膳 源码,药膳
  17. IOS上传AppStore
  18. 跟开涛老师学shiro -- 授权
  19. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...
  20. 首汽约车安全出行的点“智”之笔

热门文章

  1. 网平差中的基线定权(松弛因子)
  2. 《算法设计与分析基础》第2版
  3. ARM SMMU的原理与IOMMU
  4. 数学建模-非线性优化模型
  5. GX Works2使用问题记录
  6. Matlab2018a破解出现licensing error:-8523
  7. caffee学习中文指南(1)(1)
  8. 甩一个Microsoft office visio 2013的百度云连接
  9. hdfs命令,hadoop基本常用命令
  10. 电脑telnet工具如何开启