在只读SD卡上运行


20

我已将Raspberry Pi设置为运行XBMC,并且希望它启动以始终播放SD卡上的播放列表和文件。我已经关闭了Raspbmc自动更新。当我将SD卡切换到“锁定”位置时,它仍然可以正常运行。现在我的要求是:

  1. “只读” SD卡系统在我的应用程序中会一直工作吗?

  2. 由于SD卡始终处于只读模式,因此,如果我不使用shutdown命令,而只是关闭电源开关,会损坏系统吗?

  3. 即使工作可靠,它也会始终弹出消息“ Raaspbmc无法正常关闭”。Pi开机后,有什么方法可以禁用此消息吗?


1
如果希望此方法可靠地工作,则必须确保将适当的文件系统也挂载为只读。
Jivings

Answers:


14

我有类似的用途。我正在使用Pi在建筑物入口处窄播网页。通过电视上的USB端口为Pi供电。

挂载/只读。

为了使其防功耗,我通过更改以下行来安装/只读 /etc/fstab

/dev/mmcblk0p2  /               ext4    defaults,noatime,ro  0       1

很简单 但是功能机器上的某些进程需要编写。

在内存中挂载/ tmp。

写了很多东西,/tmp所以我在内存中添加了一行/etc/fstab

tmpfs           /tmp            tmpfs   defaults,size=30M    0       0

我有一个512MB的Pi,因此/ tmp变了30M。

禁用我不需要的服务。

我禁用rsyslog了它,使其无法记录日志,dphys-swapfile因为它没有实际的写入位置。如果您执行大量占用内存的繁重工作,则不进行交换而运行会带来问题。就我而言,不是一天只运行一个Midori进程。cat /etc/rc2.d/README在您的Pi上如何执行此操作。(raspbian默认在运行级别2中启动,raspbmc可能有所不同)

让我确实需要的服务进行仿写。

您可以像live-cd一样提供对内存中文件系统的写访问权限。与联合坐骑。但是我不喜欢为unionfs或以后的aufs交叉编译自己的内核的前景。幸运的unionfs-fuse是预建可用。它不能联合安装/,但是我真的需要吗?

运行midori我需要X才能工作。X希望在/home/pi我以pi身份自动登录时进行写操作,并想写到其中的几个地方,/var所以我决定使用unionfs将它们挂载到这些地方。

# move original /var and /home aside
mkdir /ro
mv /var /ro
mv /home /ro
# create mount points
mkdir /var /home

并将2行附加到 /etc/fstab

unionfs-fuse#/tmp=rw:/ro/var=ro  /var  fuse   cow,allow_other,nonempty
unionfs-fuse#/tmp=rw:/ro/home=ro  /home  fuse   cow,allow_other

这很讨厌,因为对/ var,/ home和/ tmp的写入最终都在/ tmp中。但是我只需要让机器运行8到10个小时,然后电源就会被切断。这样就可以了。

调整内容时重新安装读写

当我更改网络时,/etc/resolv.confdhclient编写的内容不再起作用。

$ sudo mount / -o remount,rw
$ ifdown eth0; ifup eth0
$ sudo reboot

不要忘记干净地关机,或在重新安装rw之后重新安装ro。

聚苯乙烯

如果您会读德语,则可以使用一种简洁的方法(来自archive.org)。DeutscheGründlichkeit...


4

SD卡锁定位置引脚在pcb上根本没有连接,因此除非卡具有内部锁定机制,否则您的锁定是虚拟的。尝试在SD卡锁定时将任何内容写入SD卡,然后自行检查。


4

SD的只读开关最多只能是软件选件。我拥有的几乎所有设备都将忽略它,如果avra的注释正确,Raspberry Pi可能无法判断它是打开还是关闭。因此,对您的问题:

  1. 是的,它将起作用,因为它不是只读的。
  2. 是的,它将损坏您的系统。您将需要以只读方式挂载root,并拥有一个小型ram / tempfs文件系统来处理Linux需要跟踪的内容。
  3. 不,因为您很有可能会损坏文件系统。

@avra的答案是正确的,因为物理开关检测到早期RPis中使用的标准尺寸SD卡上写保护滑块的位置(我不确定微型卡,我的似乎不知道有这样的东西)没有连接到任何东西(即持卡人侧面的触点),另一个开关(位于持卡人底部)是“插卡”开关,并且受到开关的监视。 RPi。
SlySven

2
  1. 我没有使用XBMC,但是对于普通的操作系统,这不是WRT的好主意,除非您花了一些时间为此目的进行设置。言外之意,如果未明确设置XBMC,那么它也不是一个好主意。

  2. 如果该卡确实是只读的,那么实际上不会损坏您的系统,但是,如果该卡真的是只读的,则您不太可能达到可以“关机”的程度。如果这样做了(再次表示,您可以确定整个卡确实是只读的!),请不要担心运行关机。只需拔下插头即可。由于卡上的任何内容都无法更改,因此您做什么都不重要。

  3. 当然,您可以找到负责创建该文件的init文件并进行编辑(显然,这样做必须是可写的文件系统)。

实际上,如果您以只读方式挂载根文件系统(这可能比仅使用锁定切换更难),则可能无法成功启动,因为操作系统确实需要写入磁盘。但是,如果您愿意,则可以随意做任何您想做的事情(并且可以逃避)。如果该卡为只读卡,则无法更改,因此不会造成任何伤害。


2

如果你只是做

1。

/ dev / mmcblk0p2 / ext4默认值,noatime,ro 0 1
/ dev / mmcblk0p1 / vfat默认值,noatime,ro 0 1
您具有完整的只读系统。

2。

您可以使用以下命令启动Xorg:-logfile /tmp/Xorg.log,找到需要写访问权的其他服务,将它们重定向到/ tmp

3。

如前所述,禁用不需要的服务

insserv时-r dphys-交换文件
insserv时-r rsyslog现在
insserv时-r桑巴(如果安装)等

那么就没有问题了。好问题是,如果仅RO且插件/输出一直保持电源,则SD卡是否真的不会受到任何损坏...

最终,有了一个漂亮的启动画面,您便有了一台定制的廉价独立设备。:)我喜欢这个想法,可以通过电视的USB端口为PI供电。但这不限于500mA吗?不确定,但是PI是否需要大约1A?


dhcpclient需要将/etc/resolv.conf以及可能的其他位置写入/ var。很高兴您提到了insserv命令,我需要这些命令。我正在重建设备以获取新的ca证书。
克里斯·韦瑟林

1

快速浏览此在线内容表明,没有人针对最新版本的XBMC发布任何解决方案。

Goldilocks指出的主要问题是XBMC并非旨在使其只读。如果您在OpenELEC媒体中心论坛上查看此主题,这一点将得到进一步的发展。普遍的共识是,不可能使科迪成为只读。

根据用户klojum的原因是:

在只读设备上运行OpenELEC不会发生。Kodi需要使用视频信息存储/更新其数据库。由于某种原因,系统分区设置为只读。所有设置都通过第二个/ storage分区。因此,无法通过cmdline或其他方式删除该选项。每次重新启动后都无法恢复系统。安装OE,使其按您的意愿运行,并进行完整的备份/映像。发生故障时将其恢复

人们可能已经找到较旧版本的解决方法,因此可能有一种解决方法,但总的来说,我认为没有必要。

作为使用Kodi两年的人,我可以理解SD卡损坏的烦恼。但是,还有其他一些更简单的方法来缓解该问题,这些方法不包括底层代码修补。

SD卡损坏的第一大原因是突然断电。为什么会发生这种情况有两个原因。有人在写SD卡的过程中断开了Pi的电源。否则系统死机,您必须断开电源。虽然,我认为第二个原因不太可能导致腐败。或表明存在另一个故障。

在Pi的早期,板上的电源传输电路肯定有一些不足之处。我可以记得曾经通过在树莓派上电时将USB加密狗插入树莓派而导致系统崩溃的日子。如果您不相信我,会在2011 Raspberry Pi上运行XBMC时遇到问题。另一个问题是,早期的软件还没有完全成熟。Pi对台式计算机的看法与众不同,解决软件问题需要时间。因此,许多新版本的Kodi不太可能受到随机系统冻结的影响。

为了解决突然的断电问题,请通过某种不间断电源(UPS)为Pi供电。常规的UPS可以使用,但实际上有专门为Pi设计的UPS。像这样的Raspberry Pi不间断电源。如果确实发生系统冻结,则应该为您做好准备。这意味着使用您喜欢的所有设置和应用程序以及首选项来设置操作系统,然后制作SD卡映像。因此,如果出现问题,您可以重新映像SD卡。

SD卡将发生故障的另一个原因是它已磨损。但是,这不是我经历过的问题。如果您使用知名品牌的高质量SD卡,那么我想您可能已经解决了一半。为了最大程度地减少SD卡的磨损,请确保SD卡处于绝对最小的状态。它不应该用作存储大量电影等的存储空间。

OpenELEC可以使用的一个选项正在USB驱动器上运行它。当然,所有引导文件都必须保留在SD卡上。有关如何执行此操作的教程很多。这里有一个看起来很容易遵循的方法,但是为了完整起见,我将给您一个概述:

第一步是设置SD卡和USB驱动器。使用MiniTool Partition Wizard之类的程序可将SD卡格式化为FAT32,并具有150MB或更大的主活动分区,实际上,整个SD卡都可以格式化为FAT32。只需确保将分区设置为“主要活动”即可。将SD卡标记为SYSTEM之类的标签可能也很有用,以便您记住将来的用途。然后将整个USB驱动器格式化为一个主活动分区,文件系统类型为EXT4,再次值得将其标记为STORAGE。

下载并解压缩OpenELEC之后,转到根文件夹。并选择以下文件:

openelec.ico
README.md

并将它们复制到SD卡的根目录。

接下来,从target文件夹中复制文件:

KERNEL
SYSTEM

然后再次将它们粘贴到SD卡的根目录中。

然后从3rdparty/bootloader文件夹复制文件:

bootcode.bin
config.txt
fixup.dat
LICENCE.broadcom
start.elf

并将它们粘贴到SD卡的根目录中。

最后一步是KERNEL将SD卡上文件的文件名更改为kernel.img

要创建启动文件,请在SD卡的根目录中创建一个名为的文件,cmdline.txt并在其中添加以下行:

boot=/dev/mmcblk0p1 disk=/dev/sda1 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 ssh

确保关闭文件并保存。从那里,你很好。信息源建议在USB驱动器上运行XBMC,以提高响应速度。我对此说法不太确定,但是使用此方法不会导致性能下降。

至于您的媒体收藏,我建议将其存储在第二个驱动器上,无论是USB还是网络位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.