Gắn nhiều tệp img làm thiết bị lặp đơn


18

Có cách nào để lấy một tập tin img đĩa được chia thành các phần và gắn kết nó như một thiết bị lặp không?


1
Làm thế nào là nó bị hỏng? Nó là định dạng gì? Có thể có một số phép thuật cầu chì cho điều này nếu nó là một định dạng đặc biệt, nhưng tôi nghi ngờ câu trả lời là kết hợp chúng lại với nhau!
Caleb

Tôi bị giới hạn bởi định dạng của thiết bị đối với các tệp ít hơn 4 hợp đồng biểu diễn. Tôi có quyền truy cập root mặc dù thiết bị. Có điều gì tôi có thể làm với LVM
MageProspero

Câu trả lời:


16

Tôi không nghĩ rằng bạn có thể làm điều đó tại chỗ nhưng nếu bạn có đủ không gian thì điều này sẽ hoạt động:

# 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

Bạn không thể đơn giản tạo một mảng RAID từ các tệp gốc vì các đĩa RAID có một tiêu đề cụ thể nơi lưu trữ số lượng đĩa, cấp độ RAID, v.v. Nếu bạn làm điều đó, một phần của các tập tin gốc của bạn sẽ bị ghi đè.

Bạn có thể sử dụng mdadm --buildđể tạo một mảng không có siêu dữ liệu nhưng sau đó bạn thực sự nên tạo một bản sao lưu trước. Hoặc nếu gắn kết chỉ đọc là đủ:

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

tại sao bạn muốn làm việc này? Nếu hệ thống tệp của bạn không thể xử lý các tệp> 4GB, bạn chỉ nên chuyển sang một tệp lành mạnh.


Cũng có thể làm điều đó với trình ánh xạ thiết bị, nhưng ở trên thì dễ hơn.
Wodin

Xin lỗi vì mất quá nhiều thời gian để chấp nhận, câu trả lời rất hay. Tôi sẽ không làm điều này trong trường hợp bình thường, đó là câu hỏi về chế độ phiêu lưu.
MageProspero

2
Bạn có thể muốn sử dụng truncatethay vì ddnó nhanh hơn nhiều (nó không thực hiện ghi thực tế cho FS mà chỉ phân bổ các nút và đánh dấu tệp như chỉ chứa lỗ).
Maciej Piechotka

Đẹp. Tôi không biết điều đó.
stribika

Theo kinh nghiệm, nếu bạn sử dụng các giải pháp sao lưu hoặc đồng bộ hóa dựa trên đám mây dung lượng lớn như CrashPlan hoặc Google Drive trả phí , thì nên sử dụng các tệp chia nhỏ thay vì một tệp lớn. Trong trường hợp tải xuống tệp không thành công, bạn sẽ chỉ phải tải xuống lại, giả sử, 1 GB thay vì toàn bộ 100 GB.
RAKK

2

Để gắn hình ảnh đĩa chia (hoặc hình ảnh phân vùng), bạn nên sử dụng affusetừ các afftools hiện đang được duy trì tại đây: https://github.com/sshock/AFFLIBv3

Vì vậy, nếu bạn có một tệp, hãy chia thành nhiều tệp con 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

sau đó bạn có thể tham gia với họ hầu như với 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

(điều này kết hợp tất cả các tệp lại với nhau bắt đầu bằng tệp 000, sau đó 001, 002, Bằng)

Và sau đó gắn hình ảnh

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

Việc sử dụng được mô tả ở đây và một số ví dụ ở đây . Một manpage cũng có sẵn sau khi biên dịch và cài đặt, hoặc ở đây .

PS: Đối với tôi affusechỉ hoạt động nếu các tệp phân tách có kích thước là bội số của 512 byte.


3
Tôi chỉ thử phương pháp này. Nó có một cảnh báo lớn: nó sẽ chỉ cho phép bạn gắn hình ảnh của mình dưới dạng chỉ đọc.
RAKK

Hoạt động tuyệt vời miễn là bạn chỉ có hàng trăm chứ không phải hàng ngàn khối tệp. Có thể tốt hơn khi sử dụng mdadm để tạo phân vùng đột kích tuyến tính: unix.stackexchange.com/a/98779/22709
Jay Taylor

1

Bạn có thể viết phần mở rộng thiết bị lưu trữ khối của riêng bạn (nghĩ về phần mở rộng giống như cầu chì) và thực hiện tìm kiếm phụ thuộc vào địa chỉ.

Tại đây bạn có thể tìm thấy ví dụ về cách sử dụng cầu chì https://github.com/libfuse/python-fuse/blob/master/example/hello.py


cảm ơn bạn Tôi thực sự nên quấn đầu quanh vòng tròn meta của một ngày đó
MageProspero

0

Điều gần nhất mà tôi biết cho đến nay đối với một giải pháp là tạo ra VMware VM. Bạn khởi động một đĩa CD trực tiếp Linux như Rescatux hoặc Knoppix, bạn tạo một thư mục chia sẻ SMB trên máy tính chủ của mình, bạn gắn chia sẻ SMB đó trên máy ảo của mình và sau đó ddđưa hình ảnh vào HD ảo. VMware theo mặc định lưu hình ảnh đĩa của nó dưới dạng tệp chia, vì vậy đây là cách gần nhất để đọc trực tiếp hình ảnh đĩa được chia thành nhiều tệp.

Sau đó, nếu bạn muốn truy cập các tệp từ máy tính chủ của mình, bạn có thể thử thêm HD ảo thứ hai vào hình ảnh và sao chép các tệp ở đó. Sau đó, bạn thiết lập thư mục chia sẻ SMB trên VM và kết nối với nó từ máy chủ của bạn. Ví dụ, bằng cách này, bạn có thể vi phạm giới hạn tệp 4 GB của FAT32 trong trường hợp bạn đang sử dụng iPod Classic (chỉ sử dụng fat32) hoặc thẻ SD của điện thoại thông minh của bạn (thông thường bạn phải cài đặt ROM tùy chỉnh theo thứ tự để sử dụng Ext3 hoặc NTFS trên bộ nhớ ngoài, vì điều này bạn cần có điện thoại từ một nhà sản xuất nổi tiếng như Samsung hoặc Motorola, vì vậy nếu bạn có điện thoại thông minh Trung Quốc, bạn sẽ bị vấp ngã).

Tuy nhiên, đây không phải là một giải pháp hiệu quả, nhưng vì tôi đã bị hạn chế do không thể sử dụng bất kỳ FS nào ngoài fat32 trên iPod Classic hoặc điện thoại thông minh Samsung của tôi với ROM stock, tôi đã truy quét gần như toàn bộ internet trong quá khứ và vẫn không thể tìm thấy một giải pháp hiệu quả cho việc này. Tôi thậm chí có thể phải tự viết nó.

PS: Quên đề cập rằng, nếu bạn đang ở trên Windows thì đây có thể là cách duy nhất để làm điều này.


Đã được một thời gian kể từ khi tôi đến thăm vấn đề này. Tôi vẫn có nó. Ngoài ra tôi có nó chính xác cùng một lý do bạn làm. Tôi tự hỏi nếu bạn có thể đưa ra một quy trình có hệ thống tệp tùy chỉnh của riêng mình, thực lòng tôi rất thích thử điều này. Tôi biết tôi có thể làm điều đó trong nút. Tôi đã thành công trong việc đưa thông dịch viên lên tận gốc. Tôi không biết nếu điều này giải quyết vấn đề của bạn mặc dù nếu tôi đã làm. Trên phần cứng samsung thiên hà của tôi, điều này là tốt. Nói cho tôi biết bạn muốn làm việc gì đó cho vấn đề này cùng nhau.
MageProspero

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.