gpt4 book ai didi

python - 有没有办法在SSD上写入,如果在写入过程中断开连接,数据不会丢失?

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:47 25 4
gpt4 key购买 nike

我有一个 Python 脚本,用于记录来自外部 SSD 上的相机的运动。计算机(Raspberry Pi)很有可能受到冲击并与驱动器断开连接(甚至与它的电源断开连接,但这是另一个话题,对吗?),但我不想在发生这种情况时丢失任何数据。可以实现吗?

我读到,当驱动器未安全弹出时,只会丢失最后一个写入周期。写周期到底是什么?我如何使用它来完成我想要的?也许我可以写 5 秒的 block (写周期为 5 秒),这样如果 SSD 断开连接,只会丢失 5 秒,你怎么看?

这在代码方面如何应用?

现在我正在使用 Picamera库,它使用文件流。如果 SSD 断开连接,则没有足够的时间来close() 流,这就是数据丢失的原因吗?在我的测试中,当我断开 SSD 时,我似乎只能看到视频的前 2-3 秒,无论我录制的序列是 1 分钟还是 15 秒长。

断开 SSD 后,我通常会在控制台 (Linux) 中收到一些内核错误消息:

Message from syslogd@raspberrypi at Nov 12 01:43:41 ...
kernel:[ 138.263099] Internal error: Oops: 5 [#1] PREEMPT SMP ARM

Message from syslogd@raspberrypi at Nov 12 01:43:41 ...
kernel:[ 138.366239] Process vc.ril.video_en (pid: 2403, stack limit = 0xb47c0210)

Message from syslogd@raspberrypi at Nov 12 01:43:41 ...
kernel:[ 138.374211] Stack: (0xb47c1c80 to 0xb47c2000)

Message from syslogd@raspberrypi at Nov 12 01:43:41 ...\
kernel:[ 138.379835] 1c80: 00000000 b5b84ce0 807fd650 b667536c a0000013 00000000 b47c1ccc b47c1ca8\

...

这会卡住此控制台 session 中的所有内容。

有时,但很少见(大约 1/10 次),内核不会给出错误,但脚本会引发异常(IOError: [Errno 5] Input/output error)和在控制台中显示堆栈跟踪。

感谢任何见解!

干杯!

最佳答案

当您的应用程序调用“write()”时,Linux 实际上并没有写入磁盘。 (如果这样做,一切都会很慢。)

原因是磁盘在“查找”(在磁盘上移动)时非常慢,但在“流式”(按顺序写入数据)时非常快。所以 Linux 会将数据缓冲在内存中,然后以大的顺序 block 将其全部写出。

默认情况下,Linux 会将数据在内存中最多保留 30 秒,然后再将其写出。如果这对你来说太大了,你可以调整它。尝试 echo 500 >/proc/sys/vm/dirty_expire_centiseconds 尝试每 5 秒写出一次数据。

参见: http://www.westnet.com/~gsmith/content/linux-pdflush.htm https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/

关于python - 有没有办法在SSD上写入,如果在写入过程中断开连接,数据不会丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33704713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com