每当我关闭pi时,我都会使用sudo poweroff,(据我所知)这是停止所有进程并关闭的安全方法。

虽然有时在将Pi用于嵌入式项目时,我并不总是通过SSH连接到Pi,经常感觉好像是在浪费时间拿出手机或笔记本电脑并连接到Pi以关闭电源。

我曾与之交谈过的人说过他们只是想在要关机的时候就拔掉电源线,而且他们从来没有注意到任何问题。

那么拔掉Pi会出现什么问题呢?我应该开始拔掉插头吗?

注意:在这种情况下,我不太担心数据丢失。我保存了常规备份,此Pi上唯一重要的数据在我的GitHub上。

评论

我建议不要像拔插头一样,不停地插拔电源线会缩短Pi的连接器寿命。其次,当您拔下插头时,SD卡可能正在执行操作-这很可能会损坏它。不管您如何备份数据,都会带来不便。

@DarthVader“减少连接器寿命”是什么意思?我不会再插拔电源,只是在关机前拔出电源。唯一的问题就是损坏SD卡吗?格式化SD卡会始终使卡再次可用吗?

我仍然认为最好将Pi插入电源并关闭墙上的电源。您可以通过格式化和重新安装所选的操作系统来恢复损坏的SD卡,但是一定要首先避免损坏SD卡。另一个问题是,Pi的某些部分可能正在做某事,而您切断了电源,而他们没有机会完成自己的工作。

#1 楼

我不习惯于避免将pi拔出,而是要正确关闭它们,除非我失去了无头pi的网络连接(在这种情况下,我通常懒得插入键盘等)。
通常,我通常会检查以确保此时ACT的绿色指示灯不亮;对于最新型号(或固件?),当不访问SD卡时,此功能将关闭。您要确保哪个。除非您不断写信,否则这应该足够简单。只要可用RAM中有足够的空间(例如50-100 + MB,具体取决于上下文),那么那些容易被频繁重用但实际上在任何给定时刻没有被进程加载的东西将被缓存在可用内存中,然后由操作系统(而不是真正的物理介质)从那里重新加载。这就是所有当代通用操作系统的运行方式。
如果pi正在使用SD卡,则风险最小化:卡上的文件系统与内存状态不同步。通常,这可能不是一个大问题。对于初学者来说,大多数pi上默认使用的文件系统日志记录可能是针对它的防御措施,fsck也是如此,如果未彻底卸载文件系统,则fsck应该在启动时自动应用。我将解释为什么我会很快说“可能”而不是“是”,因为在这种情况下,我认为通常可能不会。
据我所知,我从未以文件系统损坏或数据丢失而告终拔掉插头时,这些年来我可能做过一百次或更多次。但是,再次,我不是习惯性的。如果一天执行几次,最终可能会遇到统计风险级别,并且可能涉及潜在的麻烦。
这里是问题:
最近,我发现SD卡出现了一个问题,OS /文件系统机制可能对此无能为力,这也许可以解释为什么有些人似乎一直存在fs损坏的问题,尤其是那些不顾系统而陷入困境的人状态-例如,最近有人在这里声称正在运行计算模块,其中损坏导致系统在大约1/40的停电状态下无法启动。
抽象地讲,在不考虑SD卡性质的情况下,不应即使系统繁忙,它也会发生,因为最有可能最终损坏的是所写的非关键内容,而不是任何有效的只读且仅在更新过程中被更改的系统软件。
这可能发生如果位乱七八糟,那么存储各种位的位置的文件系统元信息将被破坏。但是,journalging和fsck应该能够处理此问题,这确实需要内核引导,但是pi上的内核位于单独的引导分区上,该分区可能在使用过程中被卸载(更新时除外),因为系统启动后,将不使用任何内容。这意味着有关该分区的信息即使在挂载时也应该是有效的。
但是...
SD卡是操作系统的黑匣子。没有办法了。虽然有SD卡控制器的特定驱动程序是计算机硬件的一部分(在pi上,这是SoC的一部分),但没有诸如用于不同,特定品牌和型号的卡的驱动程序之类的东西。
然而,它们内部都有微控制器,它们可能以完全不同的方式运行1。这就是使卡成为黑匣子的原因。它通过标准化的SD协议与操作系统进行交互,这是操作系统拥有的最后控制点。
与传统的旋转磁盘不同,SD卡和其他固态介质所做的事情之一是使用不透明的虚拟寻址。它们不会按照操作系统感知的顺序实际存储信息。这主要是一件好事,否则我们可能真的需要针对不同品牌的卡等使用不同的驱动程序,并且它允许卡(不透明地)实现耗损均衡,从而显着延长其使用寿命。
他们依赖的另一件事上是相对较大的“擦除块”;当需要更改块中的数据时,整个块将被擦除并重新写入。文件系统当然也可以执行这种操作,但是请注意,这是在系统软件级别上进行的,由此产生的问题恰恰是日志记录和fsck所要处理的问题。问题在于,规模文件系统所执行的操作通常比规模SD卡所进行的操作小得多。如果不是这样,您最终将浪费大量存储空间,因为文件系统块只能包含一个文件中的数据。如果该块为2 MB,并且只有几kB的数据,则其余的将被浪费。因此,文件系统块的范围通常从1/2 KiB到4 KiB。
很明显,SD卡不能这样做,实际上不能这样做,因为SD卡中的控制器不知道边界,例如“文件”,“文件系统”,甚至“设备分区”。它只是通过黑匣子内部的不透明层处理OS所需的数据块,在物理层上可能发生任何事情。
显而易见的原因之一(除了前提卡“首先不能做到这一点”)是那些块通常很大,但这些卡似乎在利用所有空间方面做得不错。擦除块的大小可能为几兆字节。而且,这些细节是专有的。虽然可能有一些机制可以使操作系统从卡中请求擦除块大小,但是卡不必提供这种大小,它可以说谎,如果操作系统尝试利用它,它将变得荒谬。
由此得出以下结论:



从一致的文件系统和分区来看,SD卡控制器没有“正确”属于哪些数据的概念,并且


SD卡是操作系统无法真正看到的黑匣子,


然后给定的1 MB擦除块中的内容是一旦使用了足够的卡(甚至可能根本没有使用过),使用4 KiB或更小的文件系统块的多个分区就必然是任意的。即使您试图强制OS使用更大/相应的块大小,也可能是这样。
因此:
如果在SD卡处于更改块中间的状态下关闭电源,则可能会导致丢失相当大量的任意数据,从而可能从卡中取出任何东西。它可能是标记为“只读”的信息。它可能是来自尚未安装的分区的信息,显然是来自几乎未使用的引导分区的信息。
如果发生这种情况,并且卡本身没有某种保护系统(有些可能有,但我敢肯定大多数人没有),那么您可能正在关注FUBAR的情况。日志记录无法防止随机MB大小损坏,后者甚至无法识别分区边界。或fsck。
或者,由于卡的硬件通常是专有的,因此卡制造商生产的软件以外的其他任何产品都可以-假设这是合理的。我从未听说过这样的事。这将使卡变得更复杂,更昂贵,并且使用起来更加麻烦。这不是目标。
换一种说法,SD卡不能以这种方式可靠地使用。它们很便宜,而且非常方便,但这是协议中的一个折衷结果:通常,如果您任意切断卡的电源,就不能保证卡上任何数据的数据完整性。

拔下Pi会出现什么问题?我应该开始拔掉插头吗?注意:在这种情况下,我不太担心数据丢失。

不会对pi造成物理损害,不,只是请注意,“数据丢失”可能会扩展到“无用卡”,需要完全重新格式化。但是,我想说的是,如果您在关闭ACT绿灯的情况下进行此操作的机会非常低。


考虑到为什么某些特定的品牌/型号,这可能很重要对于某些人来说,卡显然比其他人还差。不幸的是,尽管两张标记相同的卡在功能(大小,速度等)方面可能完全相同,但制造商并不一定要使它们在组成部分上真正做到100%相同。


#2 楼

正如@goldilocks回答的那样,风险很小,但我们大多数人都不愿意。

添加安全的断电开关非常简单,我可以在无头Pi上使用它。请参阅如何安全关闭Raspberry Pi?除了一点RAM和一个简单的按钮外,这几乎不占用资源。

#3 楼

这在很大程度上取决于您的操作系统工作方案:


如果您使用的是标准方案,则在以r / w模式使用SD卡存储实际数据时(交换分区会(这里不算在内)-那么这是一个问题,就像通常的“为PC供电”案例一样:它遍布Google,因此您将获得大量有关案例的信息。完全相同:相同的问题,相同的风险和同等的影响。
如果您只是从SD卡中读取数据,即使用ro选项从SD卡中装入每个包含数据的分区,那么它无疑只需拔下插头就没问题:您正在完成服务的工作,它们将备份数据到外部可写存储(例如NAS或NFS / SMB / CIFS共享),并且在服务关闭后-是的,只需拔下插头即可:您不再需要RAM / tmpfs磁盘,并且不会造成任何损坏



评论


您的第一点是错误的; SD卡会带来一些复杂的问题,例如与旋转磁盘不同的问题,旋转磁盘在大多数情况下应有效地保护日志记录和检查,或者更昂贵的SSD介质可能具有附加的硬件,并且符合与SD媒体相比,标准更为严格。问:我在Q.v中谈到“抽象地讲,没有考虑SD卡的性质...”

–金锁♦
16-6-25在18:01



@goldilocks当然在存储介质机制的深入研究中是不同的。我在这里更一般地讲,即“如果不确定不能确保安全地保存所有数据的事实,那么拔掉插头为什么不好”。

–阿列克谢·韦斯宁(Alexey Vesnin)
16年6月25日在18:04

@goldilocks谢谢您的出色回答。尽管我决定接受goldilocks的回答,但你们俩都提出了很好的观点,因为它在回答问题的同时提供了许多相关信息。但是,我对两个答案都赞成。

–詹姆斯·维格里(James Vickery)
16年6月25日在18:44