我有一個Python腳本,記錄外部SSD上相機的動作。計算機(一個Raspberry Pi)很有可能會受到影響,並與驅動器斷開連接(甚至是從電源斷開,但這是另一個話題嗎?),但是我想在發生這種情況時不會丟失數據。它可以實現嗎?有沒有辦法在SSD上寫入,如果在寫入過程中斷開連接,沒有數據丟失?
我讀過,當驅動器沒有安全彈出時,只有最後一個寫週期丟失。寫週期究竟是什麼,我如何可能用它來實現我想要的?也許我可以寫5秒的塊(有5秒的寫週期),這樣,如果SSD斷開連接,只會丟失5秒,你覺得怎麼樣?
這將如何適用於代碼?
現在我正在使用Picamera庫,它使用文件流。如果SSD斷開連接,那麼流沒有足夠的時間來訪問數據流,這就是數據丟失的原因嗎?在我的測試中,當我斷開SSD的連接時,無論我錄製的時間長度是1分鐘還是15秒,我都只能看到視頻的前2-3秒。
右斷開SSD後,我就會在控制檯中一些內核錯誤消息(Linux):
Message from [email protected] at Nov 12 01:43:41 ...
kernel:[ 138.263099] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Message from [email protected] at Nov 12 01:43:41 ...
kernel:[ 138.366239] Process vc.ril.video_en (pid: 2403, stack limit = 0xb47c0210)
Message from [email protected] at Nov 12 01:43:41 ...
kernel:[ 138.374211] Stack: (0xb47c1c80 to 0xb47c2000)
Message from [email protected] at Nov 12 01:43:41 ...\
kernel:[ 138.379835] 1c80: 00000000 b5b84ce0 807fd650 b667536c a0000013 00000000 b47c1ccc b47c1ca8\
...
在這個控制檯會話凍結一切。
有時,但更少(大約1/10次),內核不會給出錯誤,但腳本會產生一個異常(IOError: [Errno 5] Input/output error
)並在控制檯中顯示堆棧跟蹤。
任何見識都被讚賞!
乾杯!
除非您計劃在將數據寫入硬盤前將數據存儲在內存中,否則答案可能爲「否」。但是這也取決於你的系統有多少內存以及你正在使用什麼文件編碼。 – Makoto
當您說「除非您計劃在將數據寫入硬盤之前將數據存儲在內存中」,那麼您的意思是保存數據直到SSD插入計算機?該系統有1GB的RAM和文件編碼是H264。雖然視頻以1080p30錄製,但空間會很快填滿,儘管它可能是一個解決方案。 – maximedupre
定期調用fsync()或sync()會強制將數據寫入磁盤。在同步調用返回之前,fsync()或sync()之前的任何write()調用都將被髮送到磁盤。將會有一次性能下降,可能是非常大的一次。 – Evan