Setiap kali saya mematikan pi saya, saya menggunakan sudo poweroff
, yang (dalam pemahaman saya) adalah cara yang aman untuk menghentikan semua proses dan mematikan.
Meskipun kadang-kadang ketika saya menggunakan Pi untuk proyek tertanam di mana saya tidak selalu SSHing ke Pi, sering terasa seperti membuang-buang waktu mengeluarkan telepon atau laptop dan menghubungkan ke Pi untuk mematikan.
Beberapa orang yang saya ajak bicara mengatakan bahwa mereka hanya mencabut kekuasaan ketika mereka ingin ditutup, dan bahwa mereka tidak pernah melihat ada masalah dengan ini.
Jadi apa yang salah dengan mencabut Pi? Haruskah saya mulai mencabut saja?
Catatan: Dalam hal ini saya tidak terlalu khawatir tentang kehilangan data. Saya menyimpan cadangan reguler dan satu-satunya data penting pada Pi ini ada di GitHub saya.
Jawaban:
Saya tidak membuat kebiasaan mencabut pi dalam arti menghindari mematikan mereka dengan benar kecuali ketika saya kehilangan jaringan pada pi tanpa kepala, dalam hal ini saya biasanya terlalu malas untuk menyambungkan keyboard, dll.
Secara umum saya selalu memeriksa untuk memastikan lampu ACT hijau tidak menyala pada saat itu; untuk model terbaru (atau firmware?) ini akan dimatikan ketika kartu SD tidak diakses. Yang ingin Anda pastikan. Kecuali Anda terus-menerus menulisnya, ini seharusnya cukup sederhana; selama ada jumlah ruang kepala yang layak dalam RAM gratis (katakanlah 50-100 + MB, tergantung pada konteksnya), maka hal-hal yang cenderung sering digunakan kembali tetapi sebenarnya tidak dimuat oleh suatu proses pada saat tertentu akan di- cache dalam memori bebas dan dimuat kembali dari sana oleh OS, bukan media fisik yang sebenarnya. Ini adalah bagaimana semua sistem operasi tujuan umum kontemporer beroperasi.
Jika pi menggunakan kartu SD, inilah risikonya minimal : sistem file pada kartu tidak sinkron dengan keadaan memori. Biasanya, ini mungkin bukan masalah besar; sebagai permulaan, penjurnalan filesystem yang digunakan secara default pada sebagian besar pis mungkin merupakan pertahanan terhadapnya, seperti halnya fsck yang harus diterapkan secara otomatis saat boot jika filesystem tidak di-unmount dengan bersih. Saya akan menjelaskan mengapa saya mengatakan "mungkin" dan tidak "sebentar", karena dalam konteks ini saya pikir sering kali tidak .
Sejauh yang saya tahu, saya tidak pernah berakhir dengan korupsi sistem file atau kehilangan data saat menarik steker, yang mungkin telah saya lakukan ratusan kali atau lebih selama bertahun-tahun. Namun, sekali lagi, saya tidak terbiasa melakukannya. Jika Anda melakukannya beberapa kali sehari, pada akhirnya Anda mungkin akan mengalami apa pun tingkat risiko statistiknya, dan ada potensi tangkapan yang tidak menyenangkan.
Inilah MASALAHnya:
Baru-baru ini terpikir oleh saya bahwa ada masalah dengan kartu SD yang mekanisme OS / sistem file mungkin tidak berdaya melawan, dan yang mungkin menjelaskan mengapa beberapa orang tampaknya memiliki masalah terus-menerus dengan korupsi fs, terutama mereka yang masuk ke menarik kabel terlepas dari sistem negara - misalnya, baru-baru ini seseorang di sini mengaku menjalankan modul komputasi di mana korupsi meninggalkan sistem unbootable di ~ 1/40 pemadaman listrik seperti itu.
Dalam istilah abstrak, tanpa mempertimbangkan sifat kartu SD , itu tidak boleh terjadi bahkan jika sistem sedang sibuk, karena apa yang paling mungkin berakhir rusak adalah hal-hal yang tidak penting yang sedang ditulis, bukan perangkat lunak sistem yang secara efektif hanya-baca dan hanya akan diubah selama pembaruan.
Itu bisa terjadi jika bit sedang disulap, dan sistem informasi meta yang menyimpan di mana berbagai bit rusak. Namun, sekali lagi, penjurnalan dan fsck harus mampu menangani hal ini, yang memang mengharuskan kernel untuk boot, tetapi kernel pada pi berada di partisi boot terpisah yang mungkin juga dilepas saat digunakan (kecuali untuk saat memperbarui) karena tidak ada yang digunakan setelah sistem boot. Berarti informasi tentang partisi harus, secara efektif, tidak dapat rusak, bahkan ketika dibiarkan dipasang.
Tapi...
Kartu SD adalah kotak hitam untuk sistem operasi. Tidak ada jalan keluar dari itu. Walaupun ada driver khusus untuk pengontrol kartu SD yang merupakan bagian dari perangkat keras komputer (pada pi, ini adalah bagian dari SoC), tidak ada yang namanya driver untuk berbeda, merek dan model kartu yang berbeda.
Namun, mereka semua memiliki mikrokontroler di dalamnya yang dapat beroperasi dengan cara yang sangat berbeda. 1. Inilah yang membuat kartu menjadi kotak hitam; itu berinteraksi dengan sistem operasi melalui protokol SD standar, dan itu adalah titik kontrol terakhir yang dimiliki OS.
Salah satu hal yang dilakukan kartu SD dan media solid state lain yang berbeda dari disk pemintalan tradisional adalah menggunakan pengalamatan virtual yang tidak jelas; mereka tidak menyimpan informasi secara fisik dalam urutan yang diterima sistem operasi. Ini sebagian besar adalah hal yang baik, atau kita mungkin benar-benar membutuhkan driver yang berbeda untuk berbagai merek kartu, dll., Dan itu memungkinkan kartu untuk (secara tidak jelas) menerapkan leveling keausan , yang secara signifikan memperpanjang umur mereka.
Hal lain yang mereka andalkan adalah "menghapus blok" yang relatif besar; ketika data dalam suatu blok perlu diubah, seluruh blok dihapus dan ditulis ulang. Filesystem juga melakukan hal semacam ini sebagai hal yang biasa, tetapi perhatikan bahwa ada pada tingkat perangkat lunak sistem, dan masalah yang dihasilkan dari ini adalah jenis masalah yang dihadapi dan
fsck
ditangani.Inti dari masalah yang lebih sulit diatasi adalah bahwa sistem file skala melakukan hal itu biasanya jauh lebih kecil daripada skala kartu SD melakukannya. Jika tidak, Anda akan menghabiskan banyak ruang penyimpanan, karena blok sistem file hanya dapat berisi data dari satu file. Jika bloknya 2 MB dan hanya ada beberapa kB data, sisanya terbuang sia-sia. Jadi blok filesystem cenderung berkisar dari 1/2 KiB hingga 4 KiB.
Jelas kartu SD tidak melakukan itu, dan pada kenyataannya, tidak bisa, karena pengontrol dalam kartu SD tidak memiliki kesadaran akan batasan seperti "file", "filesystem", atau bahkan "partisi perangkat". Itu hanya berkaitan dengan potongan data yang diinginkan OS, melalui lapisan buram dari dalam kotak hitam di mana segala sesuatu dapat terjadi pada tingkat fisik.
Salah satu alasannya jelas (selain dari kartu premis "tidak bisa melakukan itu di tempat pertama") adalah blok-blok itu sering cukup besar, namun kartu tampaknya melakukan pekerjaan yang layak untuk memanfaatkan semua ruang. Blok erase mungkin berukuran beberapa megabyte . Terlebih lagi, detailnya adalah milik. Walaupun mungkin ada mekanisme di mana OS dapat meminta ukuran blok hapus dari kartu, kartu tidak harus menyediakan ini, itu bisa bohong tentang itu, dan itu akan menjadi tidak masuk akal jika OS mencoba memanfaatkannya.
Maka dari ini bahwa sejak:
Pengontrol kartu SD tidak memiliki konsep data apa yang "sah" berada di mana dalam arti sistem file dan partisi yang koheren, dan,
Kartu SD adalah kotak hitam di mana OS tidak dapat benar-benar melihat,
Lalu apa yang ada di blok penghapusan 1 MB, di mana kartu berisi beberapa partisi menggunakan 4 KiB atau blok sistem file yang lebih kecil, terikat secara sewenang-wenang begitu kartu telah digunakan cukup (dan mungkin bahkan jika itu belum banyak digunakan pada semua). Ini mungkin benar bahkan jika Anda mencoba memaksa OS untuk menggunakan ukuran blok yang lebih besar / sesuai; mereka akan berakhir tidak selaras.
Begitu:
Jika daya terputus saat kartu SD di tengah mengubah blok, yang dapat mengakibatkan hilangnya volume data sewenang-wenang yang cukup besar yang bisa berupa apa saja dari kartu. Bisa jadi informasi itu bertanda "hanya baca". Ini bisa berupa informasi dari partisi yang bahkan tidak di-mount , dan, jelas cukup, dari partisi boot yang kebanyakan tidak digunakan.
Jika itu terjadi dan kartu tidak memiliki sistem perlindungan sendiri (yang mungkin dimiliki beberapa orang, tetapi saya yakin sebagian besar tidak), maka Anda dapat melihat situasi FUBAR. Penjurnalan tidak akan melindungi terhadap korupsi ukuran MB acak yang bahkan tidak mengenali batas partisi. Atau fsck.
Atau, karena perangkat keras kartu umumnya milik, bisa apa pun selain perangkat lunak yang diproduksi oleh produsen kartu - anggap itu masuk akal. Saya belum pernah mendengarnya. Ini akan membuat kartu lebih rumit, lebih mahal, dan lebih mudah digunakan. Yang bukan tujuannya.
Dengan kata lain, kartu SD tidak dimaksudkan untuk digunakan secara andal dengan cara ini . Mereka murah dan sangat berguna tetapi itu adalah hasil dari pertukaran dalam protokol: Secara umum, tidak ada jaminan integritas data untuk apa pun pada kartu jika Anda secara sewenang-wenang mematikan kekuatan untuk itu.
Secara fisik tidak akan merusak pi, tidak, hanya waspada "kehilangan data" dapat meluas ke "kartu tidak berguna" yang perlu diformat ulang sepenuhnya. Namun, saya akan mengatakan kemungkinan jika Anda melakukannya dengan lampu ACT hijau mati sangat rendah.
sumber
Ini sangat tergantung pada skema kerja OS Anda:
ro
opsi, maka tidak ada masalah hanya dengan menarik sebuah plug: Anda sedang menyelesaikan pekerjaan layanan Anda, itu adalah tentang untuk membuat cadangan data ke penyimpanan eksternal yang dapat ditulisi (seperti NAS atau NFS / SMB / CIFS, misalnya), dan setelah layanan dimatikan - ya, cukup tarik colokan: Anda tidak memerlukan disk RAM / tmpfs Anda (s ) lagi, dan Anda tidak akan merusak apa punsumber
Sebagai @goldilocks telah menjawab ada sedikit risiko, tetapi kebanyakan dari kita tidak melakukannya.
Sangat mudah untuk menambahkan sakelar poweroff yang aman, yang saya gunakan pada Pi tanpa kepala saya. Lihat Bagaimana cara mematikan Raspberry Pi dengan aman? ini hampir tidak menggunakan sumber daya - selain dari sedikit RAM dan tombol tekan sederhana.
sumber