Nhân bản một thanh USB có thể khởi động sang một thanh có kích thước khác


11

PHẦN CỨNG: 2 ổ flash USB 8GB
DISTRO: Mint 9 Xfce liên tục Live Cd

Một ổ flash USB có hai phân vùng:
1) phân vùng
Mint32 700MB Mint 9 2) casper-rwphân vùng ext3 7.3GB

MỤC TIÊU:
Tôi muốn tạo một bản sao của ổ flash USB đó vì tôi không muốn trải qua thời gian cài đặt và định cấu hình lại từ đầu.

KINH NGHIỆM:
1) Tôi đã thấy rằng ddnó không hoạt động cho công việc này bởi vì nếu một trong các ổ flash của tôi có kích thước khác nhau 1 MB, đôi khi chúng là như vậy, thì bản sao bị hỏng.

2) Tôi đã thấy rằng việc sử dụng gpartedvà định dạng trước ổ đĩa thứ hai như ổ đĩa thứ nhất và sau đó rsyncmỗi phân vùng riêng lẻ không hoạt động vì một số lý do một số tệp không được sao chép và ổ đĩa vẫn không thể khởi động.

Tôi muốn giữ cây gậy làm việc của mình và chỉ tạo các bản sao của nó và định cấu hình gậy cho bạn bè của tôi. Bằng cách này, nếu tôi đi lên một cây gậy khác, tôi sẽ luôn có cây gậy cơ bản của mình chỉ ngồi chờ đợi.


bạn sử dụng bộ tải khởi động nào (syslinux?). Vui lòng xem xét loại bỏ câu nói đó khỏi bài đăng của bạn, nó không thêm bất kỳ giá trị nào cho câu hỏi của bạn.
Mat

Tôi đã sử dụng trình cài đặt usb trực tiếp bạc hà, vì vậy tất cả đều tự động. Tôi hy vọng quá trình nhân bản sẽ tránh làm việc với bộ nạp khởi động và sao chép conf bộ nạp khởi động hiện tại của tôi
Joshua Robison

Câu trả lời:


5

Giới thiệu

Đối với ổ đĩa có phân vùng PC (là thứ bạn sẽ tìm thấy trên hầu hết các thanh USB), bộ nạp khởi động bao gồm một phần nhỏ ở đầu ổ đĩa (bộ tải khởi động giai đoạn 1, trong khu vực khởi động của ổ đĩa) và một phần lớn hơn ở nơi khác (bộ tải khởi động giai đoạn 2, trong một tệp). Dữ liệu của giai đoạn 1 chứa vị trí vật lý của giai đoạn 2. Nếu bạn sao chép toàn bộ thiết bị (những gì bạn đã thử dd), phần của giai đoạn 1 nằm ở cùng một vị trí thực tế và thanh hoạt động, nhưng thanh mới ít nhất phải là lớn như bản gốc. Nếu bạn tạo lại các phân vùng và sao chép các tệp, bạn đang thiếu giai đoạn 1 vì đó không phải là một tệp.

Tôi nghĩ (nhưng tôi chưa kiểm tra) rằng giai đoạn 2 nằm trong phân vùng đầu tiên (FAT32). Nếu vậy, bạn có thể sao chép phân vùng bán buôn đó và sao chép cung khởi động, sau đó chỉnh sửa bảng phân vùng để phân vùng thứ hai chiếm chính xác không gian còn lại và sao chép các tệp trên phân vùng thứ hai. Bạn cũng có thể giữ một hình ảnh thô của khu vực khởi động và phân vùng đầu tiên trong một tệp trên đĩa cứng (nhưng bạn cũng có thể sao chép chúng từ thẻ nhớ USB).

Tạo một bản sao có kích thước khác

Dưới đây tôi sẽ gọi thiết bị chứa thanh gốc /dev/sdbvà thiết bị chứa bản sao /dev/sdc; thay thế tên khi cần thiết. Tạo điểm gắn kết nếu cần. Tôi giả sử rằng phân vùng FAT32 (ở đầu đĩa) được đánh số 1 và phân vùng ext3 được đánh số 2; thay số khác nhau nếu cần.

Phần đầu tiên, nếu nhân bản từ một cây gậy:

head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1

Phần đầu tiên, nếu nhân bản từ các tập tin hình ảnh:

cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1

Cuộc gọi đến partprobelà cần thiết để kernel tải lại bảng phân vùng từ đĩa (đó là trong khu vực khởi động và lệnh đầu tiên trong cả hai trường hợp trên sẽ sửa đổi khu vực khởi động). Nếu bạn bỏ qua nó, bạn sẽ gặp lỗi hoặc kernel sẽ âm thầm ghi rác vào thanh.

Để tạo các tập tin hình ảnh:

head -c 512 </dev/sdb >boot_sector.img 
cat /dev/sdb1 >first_partition.img

Bây giờ sau khi bạn đã có khu vực khởi động và phân vùng đầu tiên, bạn cần chỉnh sửa lại bảng phân vùng, để thay đổi kích thước phân vùng thứ hai. Bạn có thể làm điều này tự động bằng cách cung cấp đúng đầu vào fdisk. Cảnh báo, điều này rất dễ bị lỗi và tôi đã không kiểm tra nó. Nếu bạn không cảm thấy hoàn toàn thoải mái với phần này, hãy làm nó bằng tay.

sed -e 's/ *#.*//' <<EOF | tr -s ' ' '\n' | tr -d _ | fdisk /dev/sdc
d 2         # delete partition 2
n p 2       # new primary partition 2...
_ _         # ... using all available space
w q         # write and quit
EOF

Cuối cùng tải lại bảng phân vùng một lần nữa, tạo một hệ thống tệp ext3 và sao chép các tệp ở đó.

partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2

Phương pháp đơn giản hóa để tạo một bản sao lớn hơn

Nếu bạn thích, bạn có thể lưu trữ một hình ảnh của toàn bộ thanh. Bạn sẽ có thể sử dụng hình ảnh đó trực tiếp trên bất kỳ thanh nào có kích thước lớn nhất: chỉ cần sao chép hình ảnh đó vào thanh mới cat <whole.img >/dev/sdc, sau đó chạy partprobe /dev/sdc(hoặc rút phích cắm và đặt lại vào) để đọc lại bảng phân vùng.

Sau đó, nếu bạn thích, bạn có thể phóng to bản sao. Theo thứ tự này:

  1. Phóng to phân vùng. Thật không may, tôi không biết làm thế nào để làm điều này một cách đơn giản. partedcó thể làm điều đó với movelệnh (không resizethay đổi kích thước hệ thống tập tin), nhưng bạn cần tìm ra các đối số phù hợp - chuyển sang sector ( unit s) để tránh lỗi làm tròn.
  2. Phóng to hệ thống tập tin. Phần đó rất dễ: chỉ cần chạy resize2fs /dev/sdc2để làm cho hệ thống tập tin sử dụng toàn bộ kích thước phân vùng.

Nếu bạn bắt đầu từ một thanh lớn hơn mức cần thiết, bạn có thể thu nhỏ nó bằng cách làm theo các bước ở trên theo thứ tự ngược lại (đầu tiên thu nhỏ hệ thống tệp với resize2fs, sau đó thu nhỏ phân vùng bằng parted).

Ngoài ra, trước tiên bạn có thể sao chép thanh vào một tệp hình ảnh, sau đó làm việc trên tệp hình ảnh đó. Để truy cập các phân vùng, sử dụng một thiết bị lặp , đặc biệt liên kết một phần của tệp với đĩa . Dưới đây là bản phác thảo các bước nếu bạn muốn thu nhỏ hình ảnh (cảnh báo, chưa được kiểm tra, tiến hành cẩn thận và kiểm tra lại toán học).

fdisk -lu whole.img  # note starting sector of partition 2: $S
losetup -fs -o $(($S * 512)) whole.img
# Let $D be the desired size of partition 2, in kB
resize2fs /dev/loop0 $  # replace /dev/loop0 by whatever losetup prints
losetup -d /dev/loop0
parted whole.img
# Use parted to resize the second partition
dd if=/dev/null of=/file/to/truncate seek=1 bs=$(($S/2+$D+1))k

hmm Tôi không thể sử dụng head để chỉ sao chép 300mb đầu tiên hoặc hơn phân vùng thứ hai vào tệp img? Sẽ không cắt hết khoảng trống / khối trống ở cuối tập tin chứ?
Joshua Robison

1
@Joshua: Không, bởi vì không có lý do tại sao tất cả dữ liệu tệp sẽ nằm trong 300 MB đầu tiên và ngay cả khi đó là bạn không thể tham gia một hệ thống tệp như vậy. Bạn cần tạo một hệ thống tập tin hợp lệ với kích thước phù hợp. Bạn cũng cần phải có một phân vùng có kích thước chính xác; kích thước của phân vùng được lưu trữ trong khu vực khởi động. Nếu bạn muốn bắt đầu từ một hình ảnh có kích thước tối thiểu và phóng to nó nếu muốn, tôi đã thêm một cách để làm điều đó trong câu trả lời của mình.
Gilles 'SO- đừng trở nên xấu xa'

hmm Tôi đã thử sao chép các tập tin trước đây nhưng vì một số lý do, mọi thứ đều không sao chép. Tôi cũng đã thử rsync với sudo. và tôi nghĩ rằng tôi đã thử su root và cũng đã làm nó .... Nó chỉ không hoạt động với tôi. Tôi chắc chắn rằng các ổ đĩa không được gắn kết ... dù sao đi nữa. Tôi quyết định thu nhỏ ổ đĩa trong gparted và sau đó tạo các tệp img từ đó và sau đó khôi phục chúng vào một đĩa nhỏ hơn. Thu nhỏ trước trong gparted là giải pháp đơn giản duy nhất tôi có thể tìm thấy. Cám ơn sự giúp đở cuả bạn.
Joshua Robison

Câu trả lời của bạn có lẽ đúng và rất có thể sẽ làm những gì tôi đang hỏi. Nó quá phức tạp đối với tôi. Vì vậy, tôi đã đi với phương pháp thu nhỏ trước gparted.
Joshua Robison

Có một lỗi đánh máy trong dòng này head -c 512 </dev/sdb >/bev/sdc?
antonio

3

~ $: sudo apt-get cài đặt gddresTHER ddresTHER

~ $: ddresTHER / dev / sda / dev / sdb -v

;

Cú pháp: tiện ích / nguồn / ổ đĩa / đích / ổ đĩa --verbose

Nhận xét: hiển thị tiến trình và kiểm tra lỗi để bạn biết nếu nó được chấp nhận hoặc treo ở đâu đó. Bạn cũng có thể thêm b = bất kỳ khối kích thước nào bạn muốn. "gddresTHER" là phiên bản dựa trên gui của "ddresTHER" nhưng tôi chỉ sử dụng ddresTHER như được viết ở trên vì nó hoạt động mà không gặp vấn đề gì.


2
Lưu ý rằng định dạng phù hợp là ddrescue -v /dev/sda /dev/sdb(tùy chọn xuất hiện trước tên của thiết bị / tệp). Cảm ơn đã chỉ ra công cụ này! Dễ dàng hơn nhiều so với sử dụng dd!
xmnboy

0

Gần đây tôi đã nhân bản tính bền vững được mã hóa trực tiếp Kali của tôi từ 16 GB sang USB 64 GB 3.0, Hệ điều hành máy chủ của tôi là windows 10 pro. Tôi đã không cố gắng sao chép bằng bất kỳ bản phân phối Linux nào, tôi chắc chắn các câu trả lời ở trên là những gì bạn cần, nhưng đối với bất kỳ người dùng windows nào; Tôi đã sử dụng trợ lý phân vùng đĩa AOMEI. Sử dụng rất đơn giản, sử dụng nó để phân vùng SSD của tôi để phù hợp với Ubuntu, nhưng tôi lạc đề.

Tôi phải đảm bảo rằng USB mà tôi đang nhân bản đã được định dạng để khởi động trực tiếp. Đã cắm cả USB và chỉ cần nhấp chuột phải vào ổ 8GB; nhấp vào copysau đó chọn ổ đĩa 64 GB, nó sẽ hỏi bạn rất nhiều thứ như "bạn có chắc đây là ổ đĩa phù hợp không, mọi thứ sẽ bị xóa" tất cả đều là nhạc jazz. Chỉ cần đọc qua nó và đảm bảo mọi thứ theo thứ tự, bạn thực sự không phải làm gì nhiều.

Chỉ cần đợi quá trình kết thúc và bạn đã hoàn tất. Đã kiểm tra USB và mọi thứ đều hoạt động!

Tôi thấy đây là cách dễ nhất ít nhất đối với tôi, nhân bản các bản phát trực tiếp từ USB sang USB.

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.