Làm thế nào để nén tập tin cực lớn tại chỗ


2

Tôi cần nén tệp 646,4GB trên ổ cứng ngoài 1TB. Ổ cứng này hiện có khoảng 238,6GB miễn phí. Tuy nhiên, vì các phương pháp nén đơn giản tạo ra một tệp mới, tôi sẽ không thể nén tệp này, đó là tệp .vhdx (ảnh hệ thống Windows). Tôi có quyền truy cập vào cả Windows (10 Tech Preview) và hệ thống Unix (cả Mac và Ubuntu, nếu điều đó có ích).

Tôi cần một số cách để nén các tệp này tại chỗ hoặc một số cách để chia tệp này thành nhiều tệp nhỏ hơn mà không để lại 646,4GB lớn như vậy (nghĩa là, một số cách xóa dữ liệu khỏi tệp này khi sử dụng tệp này). Cảm ơn!


6
tôi giả định rằng bạn có thể làm điều này với dd để lấy một phần của tệp (ví dụ: 100GB cuối cùng, sau đó trunc ăn tập tin gốc tới 646,4-100GB và nén phần 100GB. Rửa sạch và lặp lại. Lưu ý rằng điều này sẽ để lại cho bạn 7 tệp nén, tất cả đều cần các hành động ngược lại để khôi phục vhdx về trạng thái ban đầu (như giải nén trước, kết hợp, tiếp theo). Tuy nhiên tôi thực sự sẽ cố gắng tránh điều này. Nếu có thể, hãy sử dụng đĩa thứ hai hoặc sử dụng mạng. Có thể kết hợp với netcat.
Hennes

5
Lấy đĩa thứ hai có thể sẽ bớt đau hơn.
Journeyman Geek

1
Tôi đề nghị Bạn không sử dụng bất kỳ phần mềm nào sửa đổi tệp gốc trong khi nén / tách tệp. Nếu có gì sai, tệp vhdx có thể bị hỏng. Ngoài ra nếu bạn đang thử nghiệm các chương trình mới, hãy tạo bản sao lưu nếu có thể.
Divin3

2
Thật. Bước 1: tạo bản sao lưu. Bước 2: Ồ, tôi đã có một bản sao và tất cả điều này là moot. Tuy nhiên, bằng chứng về khái niệm được đăng như một bài tập không thể tin được. :)
Hennes

4
Nếu đĩa được định dạng ở dạng NTFS, bạn có thể bật tính năng nén trên ổ đĩa, việc này sẽ thực hiện việc xử lý tại chỗ. Nhấp chuột phải vào ổ đĩa từ Windows File Explorer, đánh dấu vào ô "Nén ổ đĩa này để tiết kiệm dung lượng".
Peter

Câu trả lời:


2

Có, nó có thể được thực hiện.

Bằng chứng của khái niệm:

Hãy để tôi lấy một tập tin để kiểm tra với:

cp /bin/sh mylargefile

ls -l
-rw-r--r--  1 hennes  users  137208 Jul  1 20:05 my_large_file

Hãy chặt nó thành 3 mảnh, mảnh thứ nhất sẽ là 50k, thứ hai sẽ là 50k, thứ ba sẽ là 37k. Chúng tôi bắt đầu ở phần cuối với phần thứ ba.

 dd if=my_large_file of=part3 bs=1k skip=100
 33+1 records in
 33+1 records out
 34808 bytes transferred in 0.000232 secs (150046592 bytes/sec)

 ~/test$ ls -l
total 180
-rw-r--r--  1 hennes  users  137208 Jul  1 20:05 my_large_file
-rw-r--r--  1 hennes  users   34808 Jul  1 20:09 part3

Ok, vì vậy chúng tôi có thể sao chép một phần của tập tin. Bây giờ, hãy cắt bớt tệp lớn ban đầu thành 100000 byte

truncate  -s 100000 my_large_file
[hennes@dragon] ~/test$ ls -l
total 144
-rw-r--r--  1 hennes  users  100000 Jul  1 20:17 my_large_file
-rw-r--r--  1 hennes  users   34808 Jul  1 20:09 part3

Nén với chương trình yêu thích của bạn. Ví dụ.

bzip2 -9 part3
[hennes@dragon] ~/test$ ls -l part3.bz2
-rw-r--r--  1 hennes  users  11773 Jul  1 20:09 part3.bz2

Rửa sạch và lặp lại:

dd if=my_large_file of=part2 bs=1k skip=50
47+1 records in
47+1 records out
48800 bytes transferred in 0.024526 secs (1989735 bytes/sec)

Dd mới với số khác nhau. Truccate mới với số lượng khác nhau. ...

Nếu bạn làm điều này mà không có sự quan tâm tối đa, bạn có khả năng gây rối!

Các ví dụ trên đã là sự pha trộn của KB và KiB. Hãy chăm sóc extreem với số của bạn.

Ngoài ra, hãy sao lưu. Điều đó có nghĩa là bạn đã có hai lần dung lượng, vì vậy điều này không cần thiết. Chỉ sử dụng nếu bạn cần demo một cái gì đó (ví dụ như bài tập về nhà hoặc làm bằng chứng về khái niệm trong một cuộc phỏng vấn xin việc) và có nguy cơ của riêng bạn.


3

Trong cửa sổ, nhấp chuột phải vào tệp và chọn Thuộc tính, rồi Tab Chung, rồi Nút Nâng cao, đánh dấu vào nội dung nén để tiết kiệm dung lượng đĩa. Điều này làm việc cho các tập tin hoặc thư mục cá nhân.


1

CẢNH BÁO LỚN: TÔI KHÔNG THỂ ĐẢM BẢO MÃ SỐ MÃ NÀY AN TOÀN !!

Trên Debian Stretch của tôi, tôi gặp phải vấn đề tương tự.
Tôi không biết bất kỳ công cụ phát hành nào thực hiện nhiệm vụ này, vì vậy tôi tạo một kịch bản shell đơn giản cho tôi ( $1 là tệp lớn):
Để nén:

#!/bin/sh -e
#in-place compress single large file
compressor="lz4"
! test -d ./small-files && mkdir ./small-files
while true; do
size="$(stat -c%s ${1})"
block="$((1024*1024*1024))"
if [ "${size}" -gt "${block}" ] ; then
tail --bytes "${block}" "$1" | ${compressor} > "./small-files/$((${size}-${block}))"
sync
truncate -s "$((${size}-${block}))" "${1}"
sync
elif [ "${size}" -gt "0" ] ; then
tail --bytes "${block}" "$1" | ${compressor} > "./small-files/0"
sync
truncate -s "0" "${1}"
sync
else
break
fi
done
echo "success"

Để giải nén:

#!/bin/sh -e
#in-place decompress single large file
decompressor="lz4cat"
for size in $(ls -1 ./small-files | sort -n) ; do
truncate -s "${size}" "./${1}"
sync
${decompressor} "./small-files/${size}" >> "./${1}"
sync
rm "./small-files/${size}"
sync
done
echo "success!"

Đối với tổng kiểm tra:

#!/bin/sh -e
#in-place check compressed single large file
origincat () {
decompressor="lz4cat"
for size in $(ls -1 ./small-files | sort -n) ; do
${decompressor} "./small-files/${size}"
done
}
origincat | md5sum

0

Nếu tệp VHD có cửa sổ trên đó, tôi giả sử nó là do bạn nói "Hình ảnh hệ thống Windows".

Bạn có thể tốt hơn khi gắn VHD. Sau đó sử dụng một công cụ như imagex của microsoft để nén ổ đĩa thành một tệp hình ảnh.

imagex /capture /flags "professional" c: n:\images\windows.wim "Win"
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.