Montowanie wielu plików IMG jako urządzenia z jedną pętlą

19

Czy istnieje sposób, aby wziąć plik Img dysku, który jest podzielony na części i zamontować go jako urządzenie z jedną pętlą?

MageProspero
źródło
1
Jak to się zepsuło? Jaki to format? Może być w tym trochę magii bezpieczników, jeśli jest to specjalny format, ale podejrzewam, że odpowiedzią jest połączenie ich razem!
Caleb
Ogranicza mnie format urządzenia do plików mniejszych niż 4 koncerty. Mam jednak dostęp root do urządzenia. Czy jest coś, co mogę zrobić z LVM
MageProspero

Odpowiedzi:

16

Nie sądzę, że możesz to zrobić na miejscu, ale jeśli masz wystarczająco dużo miejsca, powinno to działać:

# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k

# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01

# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1

# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>

# Mount the new filesystem
mount /dev/md0 /mnt

Nie można po prostu utworzyć macierzy RAID z oryginalnych plików, ponieważ dyski RAID mają określony nagłówek, w którym przechowywana jest liczba dysków, poziom RAID itp. Jeśli to zrobisz, część oryginalnych plików zostanie zastąpiona.

Możesz użyć mdadm --builddo utworzenia tablicy bez metadanych, ale wtedy naprawdę powinieneś najpierw wykonać kopię zapasową. Lub jeśli wystarczy montować tylko do odczytu:

losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt

Dlaczego chcesz to zrobić? Jeśli twój system plików nie obsługuje plików> 4 GB, powinieneś po prostu przełączyć się na rozsądny.

stribika
źródło
Może być w stanie to zrobić za pomocą mapera urządzeń, ale powyższe jest łatwiejsze.
Wodin,
Przepraszam, że tak długo trwa akceptacja, bardzo dobra odpowiedź. Nie zrobiłbym tego w normalnych okolicznościach, to raczej pytanie w trybie przygodowym.
MageProspero
2
Prawdopodobnie zechcesz użyć truncatezamiast, ddponieważ jest znacznie szybszy (nie wykonuje rzeczywistego zapisu do FS, a jedynie przydziela i-węzły i zaznacza plik jako zawierający tylko dziurę).
Maciej Piechotka,
Ładny. Nie wiedziałem tego
stribika
Z doświadczenia wynika, że ​​jeśli korzystasz z chmurowych rozwiązań do tworzenia kopii zapasowych lub synchronizacji o dużej pojemności, takich jak CrashPlan lub płatny Dysk Google , bardzo dobrym pomysłem jest używanie małych podzielonych plików zamiast jednego dużego pliku. W przypadku nieudanego pobrania pliku, będziesz musiał ponownie pobrać, powiedzmy, 1 GB zamiast całej 100 GB rzeczy.
RAKK
3

Aby zamontować obraz podzielonego dysku (lub obraz partycji), powinieneś użyć affusez afftools, które są obecnie utrzymywane tutaj: https://github.com/sshock/AFFLIBv3

Jeśli masz plik, podziel go na kilka podtekstów test_img.000, test_img.001, test_img.002, test_img.003, test_img.004, test_img.005, test_img.006, test_img.007, test_img.008, test_img.009

możesz dołączyć do nich wirtualnie affuse

# affuse test_img.000 /mnt/combine
# ls -lh /mnt/combine
total 0
-r--r--r-- 1 root root 2.0G 1969-12-31 16:00 test_img.000.raw

(łączy to wszystkie pliki, zaczynając od pliku 000, a następnie 001, 002,…)

A następnie zamontuj obraz

mount -o ro,loop,offset=329043456 /mnt/combine/test_img.000.raw /mnt/test

Użycie opisano tutaj i kilka przykładów tutaj . Strona podręcznika dostępna jest również po skompilowaniu i zainstalowaniu lub tutaj .

PS: Dla mnie affusedziałało tylko wtedy, gdy podzielone pliki miały rozmiar wielokrotności 512 bajtów.

erik
źródło
4
Właśnie wypróbowałem tę metodę. Ma poważne zastrzeżenie: pozwoli ci zamontować obraz tylko do odczytu.
RAKK
Działa świetnie, o ile masz tylko setki, a nie tysiące fragmentów plików. Lepiej może być przy użyciu mdadm do utworzenia liniowej partycji RAID: unix.stackexchange.com/a/98779/22709
Jay Taylor
1

Możesz napisać własne rozszerzenie blokowego urządzenia pamięci masowej (pomyśl o rozszerzeniu podobnym do bezpiecznika) i wykonywać wyszukiwania w zależności od adresu.

Tutaj możesz znaleźć przykład użycia bezpiecznika https://github.com/libfuse/python-fuse/blob/master/example/hello.py

test30
źródło
dziękuję, naprawdę powinienem owinąć głowę wokół meta
okrągłości
0

Najbliżej znane mi rozwiązanie to stworzenie VMware VM. Zaczynasz na żywo CD z Linuksem, jak Rescatux lub Knoppix, tworzysz folder współdzielony SMB na komputerze-hoście, montujesz ten udział SMB na maszynie wirtualnej, a następnie ddobraz na wirtualnym HD. VMware domyślnie zapisuje obrazy dysku jako podzielone pliki, więc jest to najbliższa rzecz do bezpośredniego odczytu obrazu dysku podzielonego na wiele plików.

Później, jeśli chcesz uzyskać dostęp do plików z komputera hosta, możesz spróbować dodać drugi wirtualny HD do obrazu i skopiować tam pliki. Następnie konfigurujesz folder współdzielony SMB na maszynie wirtualnej i łączysz się z nim z hosta. W ten sposób możesz na przykład przekroczyć limit 4 GB pliku FAT32 w przypadku korzystania z iPoda Classic (który tylko groks fat32) lub karty SD smartfona (zwykle musisz zainstalować niestandardową pamięć ROM, aby aby używać Ext3 lub NTFS na zewnętrznej pamięci, do tego potrzebny jest telefon popularnego producenta, takiego jak Samsung czy Motorola, więc jeśli masz chiński smartfon, jesteś zaskoczony.

Nie jest to wprawdzie wydajne rozwiązanie, ale ponieważ ograniczyło mnie to, że nie jestem w stanie korzystać z FS innego niż fat32 na moim iPodzie Classic lub smartfonach Samsung ze standardową pamięcią ROM, przeszukałem prawie cały internet w w przeszłości i nadal nie jestem w stanie znaleźć skutecznego rozwiązania tego problemu. Może nawet będę musiał to napisać.

PS: Zapomniałem wspomnieć, że jeśli korzystasz z systemu Windows, może to być jedyny sposób, aby to zrobić.

RAKK
źródło
Minęło trochę czasu, odkąd odwiedziłem ten problem. Wciąż to mam. Mam też dokładnie ten sam powód, dla którego to robisz. Zastanawiam się, czy możesz uruchomić proces, który ma swój własny niestandardowy system plików, szczerze, chciałbym tego spróbować. Wiem, że mogę to zrobić w węźle. Odniosłem sukces, podnosząc tłumacza na język root. Nie wiem, czy to rozwiąże twój problem, gdybym to zrobił. W mojej galaktyce sprzętowej Samsung jest w porządku. Powiedz, czy chciałbyś wspólnie popracować nad tym problemem.
MageProspero
-1

Pod BSD możesz użyć opcji union do zamontowania. Pod Linuksem możesz spróbować unionFS.

julienlf
źródło
2
Nie wygląda to na zdalnie istotne. Źle odczytałeś pytanie?
Gilles „SO- przestań być zły”