Czy można uruchomić ls
na urządzeniu bez uprzedniego zamontowania?
Coś takiego:
# ls /dev/sda1
ls
.
Czy można uruchomić ls
na urządzeniu bez uprzedniego zamontowania?
Coś takiego:
# ls /dev/sda1
ls
.
Odpowiedzi:
Możesz użyć debugfs
programu e2fsprogs . Pomimo swojej historycznej nazwy, będzie działać na systemach plików ext2 / 3/4. Użycie jest proste:
# 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
…
gdzie „ls -l” jest debugfs
konkretnym poleceniem, które działa w większości jak ls -l
; nie można tam użyć dowolnego polecenia powłoki. Domyślnie debugfs otwiera dysk w trybie tylko do odczytu, więc jest to względnie bezpieczne; na przykład wypróbowanie tego na partycji innej niż ext2 / 3/4 daje tylko diagnozę:
# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open
Nie mogę powiedzieć, że rozważam tę godną polecenia praktykę, ale spełni ona wszystkie wymagania.
Celem montowania systemu plików jest dostęp do jego plików. Więc nie, ogólnie rzecz biorąc, nie można uzyskać dostępu do plików systemu plików bez jego zamontowania.
Istnieje kilka narzędzi, które uzyskują bezpośredni dostęp do pliku bez montowania, takich jak debugfs dla systemów plików ext2 / ext3 / ext4 i mtools dla systemów plików FAT.
W przypadku ext2 / ext3 / ext4 zamiast wywoływać niebezpieczny i trudny w użyciu program debugfs
, możesz podać jego ostatnią lokalizację montowania:
tune2fs -l /dev/sda1 | grep 'Last mounted'
Jest to jednak przydatne tylko wtedy, gdy zarejestrowano ostatnią lokalizację montowania.
Większość typów systemów plików obsługuje nadawanie etykiet systemom plików (np tune2fs -L foo
.). Dlatego nadaj wszystkim swoim systemom plików unikalną etykietę. Następnie zamontuj system plików według etykiety:
mount /dev/disks/by-label/foo /media/foo
lub
mount LABEL=foo /media/foo
Prosta odpowiedź: nie możesz. ls
używa standardowych procedur libc, które tłumaczą się na wywołania systemowe obsługiwane przez sterownik systemu plików, dlatego nie jest możliwe użycie ls
(lub cokolwiek przy użyciu tych wywołań systemowych) bez zamontowania systemu plików.
Możesz napisać narzędzie, które obejdzie to, posiadając własną kopię niektórych części sterownika systemu plików (coś takiego istnieje np. Do odczytu systemów plików Ext2 z Windows), ale jest to dość niepraktyczne.
Jeśli twoim problemem jest tylko identyfikacja partycji, prawdopodobnie powinieneś zacząć korzystać z GPT, która ma miejsce na nazwy partycji (72 bajty na partycję). Niektóre nadrzędne rozwiązania (na przykład Linux MD lub LVM) również pozwalają na nazewnictwo.
Jak opisano wcześniej, debugfs działa dobrze.
debugfs -R "ls -l" /dev/sda1
W przypadku NTFS istnieje ntfsls z ntfs-3g.
ntfsls /dev/sda2
W przypadku FAT istnieje mdir z mtools.
mdir -i /dev/sdc1
Na exFAT nie jestem jednak pewien. Wydaje się, że exfat-utils nie zawiera żadnych narzędzi podobnych do tych opisanych powyżej. Jest jednak dumpexfat, ale nie sądzę, że dostarczy wymaganych informacji.
Aby dowiedzieć się więcej o podłączonych dyskach, znajdziesz lsblk.
lsblk
Osobiście wolę to i ustawiłem dla tego alias:
alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"