Finde die Datei nach Blocknummer auf ext3 fs auf lvm

7

smartd hat einen fehlerhaften Block auf meiner Festplatte entdeckt und ich möchte wissen, zu welcher Datei dieser Block gehört. Ich habe ext3-Dateisystem auf einem logischen Volume. Google hat mir viele Tutorials gegeben (wie dieses: http://www.vanderzee.org/bad_blocks_howto ), wie man Dateien anhand der Blocknummer findet, wenn das Dateisystem direkt auf dem Festplattenblockgerät erstellt wird. Keiner von ihnen erwähnt LVM. Gibt es in meinem Fall eine Möglichkeit, eine Datei anhand der Blocknummer zu finden?

facha
quelle

Antworten:

10
  1. Suchen Sie, wie in der Anleitung zu fehlerhaften Blöcken beschrieben, die Partition, die den fehlerhaften Block enthält, und berechnen Sie den Sektorversatz innerhalb der Partition. Angenommen, die Partition /dev/sda3ist eine LVM-PV.

  2. Bestimmen Sie den Sektorversatz des ersten PE:

    pvs -o pe_start --units s /dev/sda3
    

    Subtrahieren Sie diesen Versatz vom fehlerhaften Sektorversatz, um den Sektorversatz vom ersten PE zu erhalten. Wenn das Ergebnis negativ ist, befindet sich der fehlerhafte Sektor im LVM-Metadatenbereich.

    Bad_Offset_from_1st_PE = Bad_Offset_in_Partition - First_PE_Start
    
  3. Ausführen pvdisplay --maps --units s /dev/sda3, um die Liste der Segmente in der PV abzurufen. Im Abschnitt „Physikalisches Volumen“ dieser Ausgabe wird auch das Feld „PE-Größe“ angezeigt.

  4. Teilen Sie den Sektorversatz vom ersten PE (den Sie in Schritt 2 erhalten haben) durch die PE-Größe in Sektoren. Das ganzzahlige Ergebnis der Division ist die schlechte PE-Nummer, und der Rest ist der schlechte Sektorversatz innerhalb dieser PE.

    Bad_PE           = Bad_Offset_from_1st_PE / PE_Size
    Bad_Offset_in_PE = Bad_Offset_from_1st_PE % PE_Size
    
  5. Suchen Sie das Segment in der Karte, das das fehlerhafte PE enthält. Wenn Sie Glück haben, ist das Segment möglicherweise frei, andernfalls wird das fehlerhafte logische Volume angezeigt. Sie können bei diesem Schritt anhalten, wenn das Volume für Sie nicht interessant ist (z. B. Swap oder einige temporäre Daten, die Sie nicht interessieren). Der Sektor kann sich auch jenseits des letzten PE befinden, was bedeutet, dass er sich entweder im nicht genutzten Bereich befindet, der kleiner als ein vollständiger PE ist, oder im zweiten Metadatenbereich am Ende der PV (falls ein solcher Metadatenbereich vorhanden ist).

    Wenn das fehlerhafte Volume ein Snapshot ist, ist es sehr schwierig, den fehlerhaften Sektor dem tatsächlichen Offset im logischen Volume zuzuordnen. Wenn Sie sich wirklich für den Inhalt des Snapshots interessieren, können Sie nur versuchen, daraus zu lesen, und hoffen, dass der fehlerhafte Sektor noch nicht vom Snapshot verwendet wurde (und wenn er verwendet wurde, hoffen Sie, dass der Computer nicht vollständig hängen bleibt beim Versuch, es zu lesen).

    Wenn das schlechte Volume etwas Besonderes wie Spiegeln oder Striping auf LVM-Ebene verwendet hat, wissen Sie derzeit nicht, wie Sie damit umgehen sollen.

  6. Berechnen Sie Bad_LE = Bad_PE - Seg_First_PE + Seg_First_LE, wo Seg_First_PEsich die erste physische Ausdehnung des fehlerhaften Segments und Seg_First_LEdie erste logische Ausdehnung im fehlerhaften Segment befindet, wie aus den Segmentdaten in der Karte hervorgeht.

  7. Berechnen Sie den Sektorversatz innerhalb des logischen Volumes:

    Bad_LV_Offset = (Bad_LE * PE_Size) + Bad_Offset_in_PE
    
  8. Kehren Sie im zweiten Schritt zum Bad Blocks Howto zurück, um die Datei zu finden, die dem Sektor Bad_LV_Offsetim Dateisystem entspricht.

Sergey Vlasov
quelle