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


“只读” SD卡系统在我的应用程序中会一直工作吗?
因为SD卡始终处于只读模式,如果我不使用shutdown命令,而只是关闭电源开关,会损坏我的系统吗?
即使这可靠地工作,它也会始终弹出消息“ Raaspbmc没有正确关闭”。 Pi开机时有什么方法可以禁用此消息吗?


评论

如果希望此方法可靠地工作,则必须确保适当的文件系统也已以只读方式安装。

#1 楼

我有类似的用途。我正在使用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进程。在您的Pi上进行操作。 (raspbian默认从运行级别2开始,raspbmc可能有所不同)。
让我确实需要伪写服务。
您可以像live-cd一样提供对内存中文件系统的写访问权限;与联合坐骑。但是我不喜欢为unionfs或以后的aufs交叉编译自己的内核的前景。幸运的是,cat /etc/rc2.d/README已预先构建。它不能联合安装unionfs-fuse,但是我真的需要吗?
运行midori我需要X才能工作。 X我想以pi的身份自动登录时想在/中写入/home/pi中的几个地方,因此我决定使用unionfs将它们安装到地方。
# move original /var and /home aside
mkdir /ro
mv /var /ro
mv /home /ro
# create mount points
mkdir /var /home

,并在/var
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
中追加了2行br />这真是令人讨厌,因为对/ var,/ home和/ tmp的写操作都以/ tmp结尾。但是我只需要让机器运行8到10个小时,然后电源就会被切断。这样就可以了。
在调整内容时重新安装读写
当我更改网络时,dhclient写的/etc/fstab不再起作用。
$ sudo mount / -o remount,rw
$ ifdown eth0; ifup eth0
$ sudo reboot

别忘了干净地关机,或在重新安装rw之后重新安装ro。
PS
如果您会读德语,则可以使用一种更简洁的方法(来自archive.org)。 DeutscheGründlichkeit...

#2 楼

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

#3 楼

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


是的,因为它不是只读的,所以可以工作。
是的,它会损坏您的系统。您需要查看以只读方式安装根目录,并拥有一个小型ram / tempfs文件系统来处理Linux需要跟踪的内容。
不,因为很有可能会损坏文件系统。


评论


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

– SlySven
16年1月1日于20:31

#4 楼


我还没有使用XBMC,但是对于普通的操作系统来说,WRT并不是一个好主意,除非您花了一些时间为此目的进行设置。言外之意,如果未明确设置XBMC,那么它也不是一个好主意。
如果卡确实是只读的,则实际上不会损坏您的系统,但是,如果它确实是只读的,只读,您不太可能到达可以执行“关机”的位置。如果这样做了(再次表示,您可以确定整个卡确实是只读的!),请不要担心运行关机。只需拔下插头即可。由于卡上的任何内容都无法更改,所以您执行什么操作都没关系。
当然,您可以找到负责的init文件并进行编辑(显然,文件系统必须可写才能这样做)。

#5 楼

如果只执行

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-swapfile
insserv -r rsyslog
insserv -r samba(如果已安装)等



,那么就没有问题了。好的问题是,如果仅使用RO并始终保持插件/插拔电源,那么是否真的不会对SD卡造成任何损害...

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

评论


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

–克里斯·韦瑟林(Chris Wesseling)
17年2月2日在15:19

#6 楼

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

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

根据用户klojum的原因是:


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


人们可能已经找到了解决旧版本的变通办法的方法,但总的来说,我认为没有必要。 />
作为使用Kodi两年的人,我可以理解SD卡损坏的烦恼。但是,还有其他一些更简单的方法可以缓解该问题,这些方法不包括低级代码修补。

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

在Pi的早期,板上的电源传输电路肯定有一些不足之处。我可以记得曾经导致系统崩溃的日子,只需在打开电源的同时将USB加密狗插入Pi。如果您不相信我,会在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卡的根目录中。
最后一步是将SD卡上文件KERNEL的文件名更改为kernel.img

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

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


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

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