Cách chỉnh sửa ảnh ISO (Bao gồm các ISO có thể khởi động)


30

Tôi đang tìm kiếm các công cụ cho Ubuntu có thể được sử dụng để EDIT ISO Images. Bao gồm các hình ảnh ISO có khả năng khởi động như Ubuntu và Windows ISO. Không chỉ chỉnh sửa mà còn lưu ISO đã chỉnh sửa và vẫn có thể khởi động khi được ghi trên Ổ đĩa USB hoặc CD / DVD.

Câu trả lời:


42

Thạc sĩ ISO cài đặt isomaster

Tôi đã sử dụng ISO Master để thêm tệp vào ISO trước đó. Nó phù hợp với những gì bạn yêu cầu bởi vì nó vẫn giữ trạng thái cho dù ISO có khả năng khởi động hay không. Tôi đã sử dụng nó trong quá khứ để thêm nội dung khác (như âm nhạc) vào một đĩa trực tiếp. Tuy nhiên, lưu ý rằng sau khi thực hiện thay đổi đối với tệp ISO, bạn chỉ có thể "Lưu dưới dạng", tức là một tệp ISO khác sẽ được tạo, vì vậy hãy đảm bảo bạn có đủ dung lượng đĩa cho cả hai.

đồng phân


2

PowerISO vừa phát hành phiên bản Linux của phần mềm chỉnh sửa ISO của họ. Giống như ISO Master , nó vẫn giữ trạng thái cho dù ISO có khả năng khởi động hay không. Tuy nhiên, nó cho phép bạn lưu trực tiếp vào tệp gốc (bằng cách xóa nó trước), do đó không cần phải có đủ dung lượng đĩa cho cả hai tệp. Tôi cũng thấy giao diện của nó dễ sử dụng và trực quan hơn so với ISO Master.

ảnh chụp màn hình PowerISO cho Linux


1

Câu trả lời phổ biến cho vấn đề này là giải nén tệp iso, sửa đổi và đóng gói lại. Có vẻ như "ISO Master", như được đề cập trong câu trả lời của dv3500ea, là một mặt trước tốt để làm điều đó.

Nếu:

  • bạn không có đủ không gian cho việc đó
  • bạn chỉ muốn thực hiện một sửa đổi phẫu thuật thay vì viết lại toàn bộ
  • bạn muốn sửa đổi thiết bị lưu trữ chứa hệ thống tệp isofs (còn gọi là iso9660) mà không cần sao chép toàn bộ thiết bị hoặc
  • Nếu bạn nghĩ rằng điều này giải nén / đóng gói lại chỉ là không đủ hack

Sau đó, câu trả lời này là dành cho bạn!

Tóm lại, chúng tôi sẽ thay thế một tệp hiện có trong hệ thống tệp isofs bằng tệp mong muốn của chúng tôi. Tệp mong muốn của chúng tôi phải nhỏ hơn tệp (đích) hiện tại và khoảng trắng theo dõi (hoặc rác) phải được chấp nhận. Điều này thực sự chỉ cần hai lệnh, nhưng hãy cẩn thận: một lỗi đánh máy có thể phá hủy hoàn toàn hệ thống tệp đích hoặc thậm chí ghi đè lên tệp nguồn. Sao lưu là bạn của bạn!

Trong trường hợp của tôi, tôi muốn lưu trữ một tập lệnh trong một khởi động trực tiếp để tôi không phải gõ lại nó mỗi lần. Kịch bản đang ở script.pyvà mục tiêu của tôi (một thanh USB) là /dev/sdc. Kích thước của tập lệnh là 202 byte, vì vậy bước đầu tiên của chúng tôi là tìm một tệp lớn hơn 202 byte, vì vậy chúng tôi có thể ghi đè lên tập lệnh. Sau khi gắn nó vào /mnt, tôi tìm thấy một tập tin phù hợp tại /mnt/info.txt.

Chúng ta không thể ghi đè lên info.txtđiểm gắn kết, nó sẽ phàn nàn rằng đó là hệ thống tệp chỉ đọc. Tuy nhiên, chúng tôi là root, vì vậy hãy cho họ thấy điều đó có nghĩa là gì! Chúng ta cần tìm ra vị trí info.txtcủa hệ thống tập tin. Tìm một số chuỗi (có lẽ) là duy nhất info.txt, ví dụ This is the official distribution CD of X., và tìm kiếm nó trên đĩa:

$ sudo strings -a -t d /dev/sdc | grep 'CD of X.'
2573588480 This is the official distribution CD of X. See INSTALL for how to [...]

Ngoài ra, điều này cũng có thể được thực hiện với grep, nhanh hơn rất nhiều, nhưng sau đó bạn cần chỉ định nó từ đầu : $ sudo grep -oba 'This is ...' /dev/sdc.

Bây giờ chúng ta đã biết nó ở đâu, chúng ta chỉ cần thay thế các byte đó bằng tệp của mình:

$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202

Đường thẳng này:

  • sao chép byte từ tệp đầu vào ( if) sang tệp đầu ra ( of) và không quan tâm rằng tệp đầu ra thực sự là một thiết bị, bởi vì "mọi thứ đều là một tệp".
  • conv=notrunc yêu cầu nó không cắt bớt tệp đầu ra, bởi vì chúng tôi chỉ muốn ghi đè lên một vài byte, không ghi đè lên tệp từ một điểm nhất định trở đi.
  • bs=1 đặt kích thước khối thành 1. Bạn thường muốn kích thước khối từ 4k trở lên, nhưng cả hai đều tránh phải làm toán (nội tuyến) và cho phép chúng tôi chỉ định vị trí chính xác cho byte.
  • seek=Ntìm kiếm một điểm nhất định trong tệp đầu ra (lưu ý seek=Nkhác với skip=Nskipbỏ qua byte từ tệp đầu vào!). Tất nhiên, chúng tôi đặt nó vào vị trí của văn bản đích.
  • count=Nchỉ sao chép nhiều byte này. Tôi nghĩ rằng điều này có thể được bỏ qua bởi vì nó sẽ thông báo kết thúc của tập tin đầu vào, nhưng tôi đã để nó chỉ để chắc chắn.

Và voila, tập tin bị ghi đè!

Nhưng chờ đã, tệp đích lớn hơn tập lệnh của chúng tôi, vì vậy trên thanh USB, tệp bây giờ giống như: "while do if run () blah; blah (); yright 2007 X Inc.". Có rác thải. Hai cách để khắc phục điều này: làm cho tệp đầu vào của chúng tôi dài hơn (thêm khoảng trắng) hoặc thêm biểu tượng nhận xét ở cuối. Lưu ý rằng nhiều trình soạn thảo thêm một dòng mới ở cuối, vì vậy bạn có thể muốn đặt count=thành N-1byte (nếu tệp của bạn bây giờ là 203 byte và bạn nhận thấy rằng byte cuối cùng là một dòng mới, hãy đặt đếm thành 202). Bạn có thể kiểm tra một tệp cho các dòng mới bằng cách sử dụng xxd script.py | tailvà kiểm tra xem byte cuối cùng là 0a(hoặc, trong trường hợp lạ, 0d).

Quá trình này là giống hệt nhau cho một .isotập tin, chỉ cần thay thế /dev/sdcbằng tinh thần your.iso.

Lưu ý rằng khi bạn kiểm tra mục tiêu trong điểm gắn kết của mình để xem liệu nó có hoạt động không, bạn có thể cần phải sử dụng stringslại (lần này là tìm kiếm tập lệnh của bạn) vì tệp có thể vẫn còn trong bộ đệm đọc.

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.