拔插头好吗?


18

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

尽管有时当我将Pi用于不总是通过SSH连接到Pi的嵌入式项目时,通常会觉得浪费时间从手机或笔记本电脑中拿出并连接到Pi以关闭电源。

我曾与之交谈过的一些人说过,他们只是在想要关闭电源时才切断电源,因此他们从未注意到有任何问题。

那么,仅拔掉Pi怎么办?我应该开始拔掉插头吗?

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


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

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

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

Answers:


23

我不习惯于将pi拔掉,以免将其正确关闭,除非我失去了无头pi的网络连接(在这种情况下,我通常懒得插入键盘等)。

通常,我总是检查以确保此时ACT的绿色指示灯不亮;对于最新型号(或固件?),当不访问SD卡时,此功能将关闭。您要确定的是哪一个。除非您不断写信,否则这应该足够简单。只要可用RAM中有足够的余量(例如50-100 + MB,具体取决于上下文),那么那些容易被频繁重用但在任何给定时刻实际上未被进程加载的事物将被缓存在可用内存中,然后由操作系统(而不是真正的物理介质)从那里重新加载。这就是所有当代通用操作系统的运行方式。

如果pi正在使用SD卡,则风险最小化:卡上的文件系统与内存中状态不同步。通常,这可能不是一个大问题。对于初学者而言,大多数pi上默认使用的文件系统日志记录可能是针对它的防御措施,如果未彻底卸载文件系统,fsck也应在启动时自动应用。我将解释为什么我不久会说“可能”而不是“是”,因为在这种情况下,我认为通常可能不会

据我所知,拔插头时我从未遇到文件系统损坏或数据丢失的情况,这些年来我可能做过一百次以上。但是,再次,我不是习惯性的。如果一天进行几次,最终可能会遇到统计风险级别,并且可能涉及潜在的麻烦。

这是问题:

最近,我发现SD卡出现了一个问题,OS /文件系统机制可能对此无能为力,这也许可以解释为什么有些人似乎一直存在fs损坏的问题,尤其是那些不顾系统而陷入困境的人状态-例如,最近有人在这里声称正在运行计算模块,其中损坏导致系统在大约1/40的断电情况下无法启动。

简而言之,如果不考虑SD卡的性质,即使系统繁忙也不会发生这种情况,因为最有可能最终损坏的是正在写入的非关键内容,而不是任何有效的系统软件只读,仅在更新过程中被更改。

如果杂乱无章地发生位,则可能会发生,因此存储各种位的位置的文件系统元信息已损坏。但是,journalging和fsck应该能够处理此问题,这确实需要内核引导,但是pi上的内核位于单独的引导分区上,在使用过程中(除了更新时),该分区也可能会卸载,因为系统启动后,将不使用任何内容。这意味着有关该分区的信息应该即使在未安装的情况下也应该是有效的。

但...

SD卡是操作系统的黑匣子。没有办法了。尽管有SD卡控制器的特定驱动程序是计算机硬件的一部分(在pi上,这是SoC的一部分),但没有诸如用于不同,特定品牌和型号的卡的驱动程序之类的东西。

但是,它们内部都具有可以以非常不同的方式运行的微控制器。1. 这是什么使卡黑匣子; 它通过标准化的SD协议与操作系统进行交互,这是OS拥有的最后控制点。

与传统的旋转磁盘不同,SD卡和其他固态介质所做的事情之一是使用不透明的虚拟寻址。它们不会按照操作系统感知的顺序实际存储信息。这主要是一件好事,否则我们可能真的需要针对不同品牌的卡等使用不同的驱动程序,并且它允许卡(不透明地)实现损耗平衡,从而显着延长了使用寿命。

他们依赖的另一件事是相对较大的“擦除块”。当需要更改块中的数据时,整个块将被擦除并重新写入。当然,文件系统也可以执行此类操作,但是请注意,这是在系统软件级别上进行的,由此产生的问题恰恰是日志记录和fsck处理的问题类型。

更难以逾越的问题的关键是,规模的文件系统做的通常是比规模SD卡做较小。如果不是这样,您最终将浪费大量存储空间,因为文件系统块只能包含一个文件中的数据。如果该块是2 MB,并且只有几kB的数据,则其余的将被浪费。因此,文件系统块的范围通常从1/2 KiB到4 KiB。

显然,SD卡不会这样做,实际上却不能这样做,因为SD卡中的控制器不了解“文件”,“文件系统”甚至“设备分区”等边界。它只是通过黑匣子内部的不透明层处理OS所需的数据块,在物理层上可能发生任何事情。

显而易见的原因之一(除了前提卡片“首先不能做到这一点”)是那些块通常很大,但是卡片似乎在利用所有空间方面做得不错。擦除块的大小可能为几兆字节。而且,这些细节是专有的。虽然可能有一些机制可以使操作系统从卡中请求擦除块的大小,但是卡不必提供这种大小,它可以躺在它上面,如果操作系统试图利用它,它将变得荒谬。

因此,由于:

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

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

然后,给定的1 MB擦除块(其中的一块卡包含使用4 KiB或更小的文件系统块的多个分区)中的内容,一旦该块已被充分使用(并且即使在该块上未使用太多,也可能会是任意的)。所有)。即使您试图强制OS使用更大/相应的块大小,也可能是这样。他们最终会错位。

所以:

如果电源被切断,而SD卡是在改变一个块的中间,这可能会导致相当大的体积可以是任意的数据丢失任何东西从卡。它可能是标记为“只读”的信息。 它可能是来自什没有挂载的分区的信息,显然是来自几乎未使用的引导分区的信息。

如果发生这种情况,并且该卡本身没有某种保护系统(有些人可能拥有,但我敢肯定大多数人没有),那么您可能正在观察FUBAR的情况。日志记录无法防止随机MB大小损坏,后者甚至无法识别分区边界。或fsck。

或者,由于卡的硬件通常是专有的,因此卡制造商生产的软件以外的其他任何东西都可以-假设是合理的。我从未听说过这样的事。这将使卡变得更复杂,更昂贵,并且使用起来更加麻烦。这不是目标。

换句话说,SD卡不能以这种方式可靠地使用。它们很便宜,而且非常方便,但这是协议中的一个折衷结果:通常,如果您任意切断卡的电源,就不能保证卡上任何数据的数据完整性。

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

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


  1. 当考虑为什么某些特定牌子的卡/型号明显比其他人差很多时,这可能很重要。不幸的是,尽管两张标有相同标签的卡在所陈述的特征(尺寸,速度等)方面可能是相同的,但制造商并不一定要使它们在组成部分上真正做到100%相同。

1

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

  • 如果您使用的是标准方案,则当您在读/写模式下使用SD卡获取实际数据时(交换分区在此处不计入)-就像通常的“为PC插电”情况一样,这是一个问题:围绕Google,所以您会获得大量有关此案的信息。完全相同:相同的问题,相同的风险和同等的影响。
  • 如果您只是从SD卡中读取数据,即通过选件安装SD卡中每个包含数据的分区ro,那么毫无疑问,拔下插头绝对没有问题:您正在完成服务的工作,它们与将数据备份到外部可写存储(例如NAS或NFS / SMB / CIFS共享),然后在服务关闭后-是的,只需插拔插头即可:您不需要RAM / tmpfs磁盘),您将不会受到任何损害

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

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

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

1

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

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

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.