Menyiapkan Raspberry sebagai pencatat data

13

Seperti judulnya saya sedang mengerjakan aplikasi embedded sederhana yang membaca beberapa informasi dari port serial dan mencatatnya ke file, selain menampilkan sedikit status pada layar.

Saya sekarang pada tahap logging tampaknya sedang berjalan dan saya mencoba untuk mengkonfigurasi sistem dan saya punya beberapa pertanyaan.

  1. Sistem ini dimaksudkan untuk mencatat data ke stik USB FAT32, yang dapat dicabut, dipasang kembali atau diganti setiap saat. Apa metode yang disukai untuk memasang otomatis setiap penyimpanan massal USB yang dimasukkan ke direktori tetap? Paket usbmount tampaknya hampir melakukan ini, tetapi kurangnya perawatan membuat sedikit waspada.

  2. Saya tidak dapat menjamin catu daya dan melakukan shutdown yang bersih. Untungnya, satu-satunya file yang akan ditulis, selain dari informasi OS internal, harus log. Akankah sistem file penjurnalan untuk OS menyelamatkan saya dari diri saya sendiri atau haruskah saya memasang sistem hanya-baca atau bermain-main dengan disk RAM?

  3. Akankah sistem file FAT pada stik USB bertahan dan pulih dari pemadaman listrik dan tiba-tiba ejeksi? Haruskah saya membuat file log baru setiap kali dipasang?

  4. Saya telah menyiapkan server X untuk memulai secara otomatis dan mengutak-atik skrip autostart LXDE untuk memulai tampilan status dan menonaktifkan window manager / screen saver. Apakah ada gotcha lain untuk mempertahankan tampilan yang berkelanjutan?

  5. Logger tidak akan memiliki akses Ethernet dan lebih membutuhkan jam yang akurat. Apakah modul RasClock pilihan yang cocok?

Maaf tentang posting panjang dan beberapa pertanyaan terkait semi.

Saya terbiasa berurusan dengan perangkat sederhana yang tertanam yang saya dapat kontrol penuh atas perangkat lunak, dan tugas mengkonfigurasi dengan benar sistem operasi nyata membuat saya sedikit cemas. Di sisi lain saya agak curiga bahwa saya bukan satu-satunya (ab-) yang menggunakan Pi untuk jenis aplikasi ini jadi semoga pertanyaannya tidak terlalu spesifik untuk situasi khusus saya.

doynax
sumber
Apakah Anda mendeskripsikan solusi serial USB> Anda di suatu tempat sehingga calon datalogger lain dapat mencobanya? Saya ingin mendapatkan nilai tambahan dari scraper / logger / webcam Pi saya. Terima kasih!
Tai Viinikka

Jawaban:

7

Sistem ini dimaksudkan untuk mencatat data ke stik USB FAT32, yang dapat dicabut, dipasang kembali atau diganti setiap saat.

Bagian yang dicabut itu bermasalah. AFAIK, tidak ada sistem komputer di mana pun yang menjanjikan Anda hak untuk menarik USB keluar tanpa pemberitahuan di titik mana pun tanpa masalah potensial. Jadi, Anda harus memikirkan cara menyiasatinya.

Saya tidak dapat menjamin catu daya dan melakukan shutdown yang bersih.

Sekali lagi, tiba-tiba memotong daya pada (hampir semua) sistem komputer berisiko. Ini biasanya berakhir baik-baik saja (yang belum melakukan ini beberapa kali, secara tidak sengaja, karena kegagalan daya, dll?), Tapi tampaknya ada jumlah yang tidak biasa orang pelaporan korupsi kartu SD dengan pi. Jadi, jika Anda bermaksud, "Sebagian besar sistem tidak akan dimatikan dengan bersih" Anda harus memikirkan kembali, karena itu akan menjadi strategi buntu. Perhatikan bahwa dimungkinkan untuk memicu shutdown tanpa keyboard atau koneksi jaringan. Anda dapat menggunakan metode serupa untuk memicu unmount stick usb yang bersih juga.

Anda bisa menambahkan syncopsi /etc/fstabuntuk membatasi caching, tetapi man mountperhatikan:

Dalam hal media dengan jumlah terbatas siklus tulis (misalnya beberapa flash drive) "sinkronisasi" dapat menyebabkan pemendekan siklus-hidup.

Ini termasuk kartu SD, meskipun selama Anda ingat untuk sesekali menguji (dan mengganti, jika perlu) media Anda, mungkin ada manfaatnya. Ini akan berdampak sedikit pada kinerja umum, saya pikir.

Jadi, cobalah untuk menghindari mencabut steker atau stik usb secara tiba-tiba sebaik mungkin, dan tentu saja tidak merancang pengaturan yang tergantung pada ini. Misalnya, jangan katakan pada diri sendiri atau pengguna lain, "Tidak apa-apa mencabut stik USB kapan pun Anda mau", karena tidak dan Anda tidak dapat membuatnya begitu.

Membuat syncpanggilan yang sesuai dalam aplikasi Anda (misalnya, saat idle, atau setelah penulisan yang signifikan) adalah ide yang bagus.

Setelah Anda memiliki semua yang Anda inginkan diinstal dan dikonfigurasi , Anda berpotensi dapat me-mount filesystem root read-only, jika Anda membuat partisi terpisah untuk /var, /run, dan /tmpdan mount rw mereka; Anda juga dapat membuat satu partisi yang terpasang seperti itu dan menghubungkan direktori rw ke dalamnya.

Pada pi raspbian, Anda tidak perlu khawatir /run, karena sudah tmpfs (RAM); /sysdan /procjuga dalam RAM (tapi jangan menggunakannya untuk apa pun kecuali apa yang dimaksudkan). Jika sistem ini untuk satu tujuan dan semua data Anda masuk ke USB stick, /varadalah satu-satunya yang bermasalah tetapi tidak, saya pikir, sangat kritis.

goldilocks
sumber
Masalah utama kami adalah bahwa daya dapat terputus kapan saja selama perhentian darurat, sesuatu yang saya curigai akan sering terjadi selama pengujian (karena itu perlu untuk memulai dengan penebang). Saya akan memeriksa kita mungkin memasang baterai cadangan untuk Pi, dan mungkin memasang semacam sensor untuk mendeteksi hilangnya daya. Namun hidup saya akan jauh lebih mudah jika sistem file root mungkin dipasang dalam mode read-only dan memori USB dijaga melalui flush periodik dan sejenisnya.
doynax
@doynax: Dimungkinkan untuk menjalankan dengan RO filesystem root. Saya tidak punya pengalaman dengan itu, tapi saya menambahkan beberapa paragraf di akhir tentang apa yang saya yakini sebagai masalah mendasar.
goldilocks
2

Dalam kehidupan sebelumnya saya bekerja pada driver perangkat yang membaca / menulis kartu memori. Mereka dapat ditarik di tengah operasi apa pun, sehingga bahkan baterai atau kapasitor yang didukung daya tidak akan membantu. Berdasarkan spesifikasi format chip, saya menyimpulkan perilaku yang diperlukan untuk kerusakan minimum yang dilakukan oleh penghapusan dan penyisipan "panas".

Pada dasarnya, apa yang perlu Anda lakukan adalah memastikan bahwa jika Anda terputus pada pertengahan penulisan blok data (atau kontak-kontak yang tersumbat), Anda dapat mengenali faktanya. pada dasarnya menambahkan data dengan nomor blok (dan panjang jika tidak ukuran tetap), dan menambahkan nomor blok CRC dan (yang sama) di akhir.

Tulisan pertama yang Anda lakukan adalah di akhir, dengan nilai yang BUKAN nomor blok berikutnya. Dengan cara ini, jika penulisan Anda tidak selesai, akan ada ketidakcocokan nomor blok dan bahwa blok data diketahui sebagai sampah. Kemudian tulis blok data Anda dengan nomor blok nyata, diikuti oleh panjangnya, diikuti oleh CRC Anda yang dihasilkan oleh algoritma favorit Anda, dan nomor blok nyata lagi. (CRC adalah untuk melindungi terhadap kontak yang tidak benar yang merusak data Anda).

Ketika daya dipulihkan atau kartu memori dimasukkan kembali, hanya menerima blok berurutan ke titik blok mulai dan nomor urutan akhir tidak cocok atau CRC salah. Hapus blok itu dan lanjutkan logging.

Ini adalah hal-hal tingkat rendah. Melakukannya melalui sistem file adalah cerita lain.

Yang benar-benar Anda butuhkan adalah salinan berlebihan FAT Anda, dan lakukan hal serupa di sekitar tabel FAT. Nomor urut akan memberi tahu Anda mana yang terbaru, dan pertandingan depan / belakang serta CRC akan memastikan integritas.

Ini sudah lewat jam tidur saya, jadi saya harap ini cukup jelas.

Rufus V. Smith
sumber
1

Adapun jam yang akurat, ada banyak modul GPS murah yang tersedia. Sulit menemukan jam yang lebih akurat dari itu.

Mat
sumber
Itu saran yang bagus. Simpan kami dari kesulitan mengatur jam dan berurusan dengan baterai. Kita hanya perlu melacak zona waktu (dan aturan DST saya kira), dan untuk data logger murni waktu universal harus baik-baik saja.
doynax
Apakah modul GPS berfungsi di dalam ruangan saat tidak ada bagian langit yang terlihat dan masih memberikan manfaat dibandingkan RTC sederhana?
Stéphane Gourichon