Ist es möglich, ls
auf einem Gerät zu laufen , ohne es vorher zu mounten?
Etwas wie das:
# ls /dev/sda1
ls
.
Ist es möglich, ls
auf einem Gerät zu laufen , ohne es vorher zu mounten?
Etwas wie das:
# ls /dev/sda1
ls
.
Antworten:
Sie können das debugfs
Programm von e2fsprogs verwenden . Trotz seines historischen Namens funktioniert es auf ext2 / 3/4 Dateisystemen. Die Verwendung ist einfach:
# debugfs -R "ls -l" /dev/sda6
2 40755 (2) 1001 1001 4096 17-Sep-2013 04:03 .
2 40755 (2) 1001 1001 4096 17-Sep-2013 04:03 ..
16 100644 (1) 1001 1001 9085 17-Sep-2013 04:03 avserver.conf
17 100644 (1) 1001 1001 2177 17-Sep-2013 04:03 bash.bashrc
26 100644 (1) 1001 1001 722 17-Sep-2013 04:03 crontab
…
wobei "ls -l" ein debugfs
spezifischer Befehl ist, der sich meistens so verhält ls -l
; Sie können dort keinen beliebigen Shell-Befehl verwenden. Standardmäßig öffnet debugfs ein Laufwerk im schreibgeschützten Modus, sodass dies relativ sicher ist. Wenn Sie dies beispielsweise auf einer Partition ohne ext2 / 3/4 versuchen, erhalten Sie nur eine Diagnose:
# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open
Ich kann nicht sagen, dass ich diese empfehlenswerte Praxis in Betracht ziehe, aber sie wird das tun, was Sie verlangen.
Der springende Punkt beim Mounten eines Dateisystems ist der Zugriff auf seine Dateien. Nein, im Allgemeinen können Sie nicht auf die Dateien eines Dateisystems zugreifen, ohne es zu mounten.
Es gibt einige Dienstprogramme, die direkt auf eine Datei zugreifen, ohne sie zu mounten, z. B. debugfs für ext2 / ext3 / ext4-Dateisysteme und mtools für FAT-Dateisysteme.
Für ein ext2 / ext3 / ext4 debugfs
können Sie den letzten Mount-Speicherort auflisten, anstatt das gefährliche und schwer zu verwendende Programm aufzurufen :
tune2fs -l /dev/sda1 | grep 'Last mounted'
Dies ist jedoch nur nützlich, wenn der letzte Mount-Speicherort aufgezeichnet wurde.
Die meisten Dateisystemtypen unterstützen die Vergabe von Dateisystembezeichnungen (z tune2fs -L foo
. B. ). Geben Sie also allen Ihren Dateisystemen eine eindeutige Bezeichnung. Hängen Sie dann das Dateisystem nach Label ein:
mount /dev/disks/by-label/foo /media/foo
oder
mount LABEL=foo /media/foo
Einfache Antwort: Sie können nicht. ls
Verwendet Standard-Libc-Routinen, die in Systemaufrufe übersetzt werden, die vom Dateisystemtreiber bereitgestellt werden. Daher ist es nicht möglich, diese zu verwenden ls
(oder irgendetwas, das diese Systemaufrufe verwendet), ohne das Dateisystem zu mounten.
Sie könnten ein Dienstprogramm schreiben, das dies umgeht, indem Sie eine eigene Kopie einiger Teile des Dateisystemtreibers haben (so etwas gibt es beispielsweise zum Lesen von Ext2-Dateisystemen unter Windows), aber das ist ziemlich unpraktisch.
Wenn Ihr Problem nur darin besteht, die Partitionen zu identifizieren, sollten Sie wahrscheinlich GPT verwenden, das Platz für Partitionsnamen bietet (72 Byte pro Partition). Einige darüber liegende Lösungen (z. B. Linux MD oder LVM) ermöglichen auch die Benennung.
Wie bereits beschrieben, funktioniert debugfs gut.
debugfs -R "ls -l" /dev/sda1
Für NTFS gibt es ntfsls von ntfs-3g.
ntfsls /dev/sda2
Für FAT gibt es mdir von mtools.
mdir -i /dev/sdc1
Zum Beispiel bin ich mir allerdings nicht sicher. Exfat-utils enthält anscheinend keine Tools, die den oben beschriebenen ähnlich sind. Es gibt zwar Dumpexfat, aber ich glaube nicht, dass es die angeforderten Informationen liefert.
Weitere Informationen zu angeschlossenen Laufwerken finden Sie unter lsblk.
lsblk
Persönlich bevorzuge ich dies und habe einen Alias dafür festgelegt:
alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"