У меня есть скрипт Python, который записывает движение с камеры на внешний SSD. Велика вероятность того, что компьютер (Raspberry Pi) получит удар и отключится от накопителя (или даже от это источник питания, но это уже другая тема, верно?), но я бы не хотел потерять данные, когда это произойдет. Это достижимо?
Я читал, что только последний цикл записи теряется, когда диск не извлекается безопасно. Что такое цикл записи и как я могу потенциально использовать его для достижения того, что хочу? Может быть, я мог бы записывать куски по 5 секунд (иметь циклы записи по 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\
...
который замораживает все в этом сеансе консоли.
Иногда, но реже (примерно в 1/10 раза), ядро не выдает ошибки, но скрипт вызывает исключение (IOError: [Errno 5] Input/output error
) и показывает в консоли трассировку стека.
Любое понимание ценится!
Ваше здоровье!