Soru Bir flash cihazdaki bu FS hatasını nasıl ayırım?


Gömülü bir linux cihazına konsol erişimim var. Bu cihazda, bir FAT dosya sistemi olarak bölümlenmiş olan flaş bellek parçası bulunmaktadır.

Onun çalışan linux-2.6.31.

Ancak bu hataları konsolda bugünlerde görüyorum ve FAT dosya sistemi sadece okunur.

111109:154925 FAT: Filesystem error (dev loop0)
111109:154925 fat_get_cluster: invalid cluster chain (i_pos 0)
111109:154925 FAT: Filesystem error (dev loop0)
111109:154925 fat_get_cluster: invalid cluster chain (i_pos 0)

Bunun neden olduğunu anlayamıyorum? Kök neden nedir? Ve tamir nedir? Bu sorunun cihazdaki olası nedenini nasıl araştırabileceğimi gösteren cevapları takdir ediyorum.


6
2017-11-16 22:41


Menşei


flash bellek bozuk mu? - The Unix Janitor
Bir disk kontrolü yaptın mı? Örneğin bir pencerede chkdsk. - The_aLiEn
Flash bellek bozuk değil, ancak bu hatayı şimdi ve sonra görüyorum. Neden olduğunu anlamaya çalışmak istiyorum? Yazılımdaki hata nedeniyle ya da bir problemi olan flash bellek kısmıdır. - abc
Muhtemelen bir yazılım hatası değil, FAT çok iyi test edildi. Belki de flaş ani bir güç kaybına uğrar. Bu diskin yedek / dd görüntüsüne sahip olduğunuzdan emin olun. - AndreasM
Teşekkürler Andreas. Çekirdek bir böcek olabileceğini düşünüyor musun? Bu cihaz için cihaz için özelleştirilmiş çekirdek var. - abc


Cevaplar:


Gerçekte bit ve bayt düzeyinde gerçekleşen şey, dosya ayırma tablosunun 4 baytının (veya daha fazlasının) üzerine yazılmasıdır. 0x00 bayt.

Dosya tahsis tablosunun nasıl çalıştığını kısaca açıklayacağım. Değerleri aynı dizinin indisleri olan bir dizi olarak ele alınabilir. Yani bir dosyanın ilk küme numarasının olduğunu biliyorsak isonra bir sonraki küme numarası fat[i]ve bundan sonraki fat[fat[i]], ve bunun gibi. (Bu biraz basitleştirilmiş). Zincirin sonuna ulaşıldığına işaret etmek için geçerli bir küme numarası yerine özel bir EOC değeri kullanılır.

Bir FAT dosyasını diskten okumak için, sırayla dosyanın saklandığı küme numaralarına ihtiyacınız vardır. Dizin girişi ilk küme numarasını verir (i). Geri kalanlar zinciri takip ederek bulunabilir fat[i], fat[fat[i]] vb EOC değeri ile karşılaşılana kadar. Daha sonra, her kümenin disk konumu konumunu küme numaralarından almak, her kümeyi bellekte okumak ve birleştirmek için basit bir hesaplamadır.

fat_get_cluster: invalid cluster chain Hata oluştu değer olduğunda 0x00000000 bulunan böyle bir zinciri takiben. Bu olmamalı. Yeni geçerli bir küme numarası veya EOC değeri olmalıdır. Bu durumda daha fazla dosya okunamaz, çünkü zinciri daha fazla takip etmenin bir yolu yoktur. ( 0x00000000 değer, bir kümeyi ücretsiz olarak işaretlemek için kullanılır. küme 0 asla veri depolamak için kullanılmaz, bu yüzden herhangi bir belirsizlik yoktur)

Durumunuz özel bir durum olabilir, i_pos 0 olarak verilir. Bu mesajı aldığımda, çok büyük bir sayıydı. Çekirdek kaynağı diyor:

    loff_t i_pos;           /* on-disk position of directory entry or 0 */

Yani i_pos bir küme numarası değil, diskteki bir konum. Sıfır olduğunda ne anlama geldiğini bilmiyorum.

DÜZENLE: Neden olmuş olabilir, sadece spekülasyon yapabilirim, ama burada bazı olasılıklar var:

  1. Bir FAT sürücüsü hatası.
  2. Kozmik ışınlar.
  3. Bir virüs veya diğer zararlı yazılımlar.
  4. Belki iki program / sürücü yazıyor ve aynı FAT'a aynı sebepten dolayı okuma yapıyorlarsa, birbirlerinin üzerinden geçebilirler. Mümkün mü?
  5. Yanlış zamanda zor güç. Flash sürücüler, değişiklik yapmadan önce bir bloğu sıfırlamalıdır, bu nedenle teorik olarak silme işleminden hemen sonra bir güç kesintiye uğrayacaktır. Var failsafes Bunu çoğu sürücülerde engellemek için.
  6. Kullanıcı hatası veya sabotaj (ör. dd if=/dev/zero of=/dev/sda1 bs=512 count=1 seek=32 - Bunu evde denemeyin!)

FAT dosya sistemi sürücüleri aslında iki FAT tablosunu artıklık için güncel tutar, ikinci yalan ilkinden hemen sonra. Aynı olup olmadıklarını kontrol etmek, neler olabileceğine dair ipuçları verebilir. Yalnızca küme zincirini kıran değere göre farklılık gösterirlerse, bir şekilde doğrudan bir şekilde kurcalama yaparlar, bence, en az 1 ve 3'ünün işi “düzgün bir şekilde” yapması beklenmelidir.

Yine de, çoğu modern sürücünün FAT tablosunun tamamını RAM'de tutacak ve her iki sürücüye de geri dönen parçaları yazacağı düşünülüyor. Böylece, bir seferde bir fark olsa bile, normal kullanım sırasında hızlı ve sessiz bir şekilde "sabit" olmuş olabilir. Bunun sadece eğitimli bir tahmin olduğunu unutmayın.

Sonunda, koşullar hakkında daha fazla bilgi sahibi olmadan herhangi bir kesinlik ile bilmek çok zordur ve daha sonra muhtemelen tahmin çalışmasıdır. Sorunu güvenilir bir şekilde yeniden oluşturabilirseniz ideal koşullar olacaktır. Daha sonra ne değiştiğini ve ne olduğunu, yerleştirmede ipuçlarına ve değişikliklerin içeriğine bakarak görmek için "önce" ve "sonra" FAT tablolarını (ve FAT başlıklarını) karşılaştırdım.


6
2017-07-25 08:21



Böyle bir hatanın ana sebebi ne olabilir biliyor musunuz? - abc
@abc Güncellenmiş cevaba bakınız. - Lauritz V. Thaulow


FAT32'niz bir sebepten dolayı bozulmuş. Benim usb çubuğum bozuk bir FS ile biter çünkü şu anda bir ARM platformunda bir usb host problemini ayıklamaktayım. Testlerimden sonra, masaüstü bilgisayarımdaki komutları takip ediyorum (Ubuntu 11.04):

$ sudo fsck.msdos -aw /dev/sdb1

Ref: https://askubuntu.com/questions/31614/how-to-delete-edit-files-from-readonly-filesystem


5
2017-07-13 13:55





Aldığınız hatalar geçersiz küme zinciri ve dosya sistemi hatası açıkça dosya sistemi hatası olduğunu gösterir.

FAT'de Wikipedia girişi şöyle diyor:

Bir bölüm, küçük boyutlu kümelere ayrılır, küçük   bitişik boşluk blokları. Küme boyutları, türe bağlı olarak değişir   kullanılan FAT dosya sistemi ve bölümün boyutu, genellikle   küme boyutları 2 kB ile 32 kB arasında bir yerde bulunur. Her dosya olabilir   büyüklüğüne bağlı olarak bu kümelerin bir veya daha fazlasını işgal eder; Böylece, bir   dosya bu kümelerin bir zinciriyle temsil edilir (   tekil bağlantılı liste). Ancak bu kümeler zorunlu olarak saklanmaz   diskin yüzeyinde birbirine bitişik ama çoğu zaman yerine   Veri Bölgesi boyunca parçalanmış.

Dosya Ayırma Tablosu (FAT) eşleyen girişlerin listesi   bölümdeki her küme. Her bir giriş beş şeyden birini kaydeder:

  • Bir zincirdeki sonraki kümenin küme numarası
  • zincirin sonunu gösteren özel bir küme zinciri (EOC) girişi
  • Kötü bir kümeyi işaretlemek için özel bir giriş
  • kümenin kullanılmadığını not etmek

Bu bağlantı, birisinin fsck kullanarak hafıza kartı ile benzer problemi çözdüğünü söylüyor.


1
2017-11-18 05:57