จะสร้างไฟล์เก็บถาวรแบบแยกในหลายขั้นตอนเพื่อประหยัดพื้นที่ได้อย่างไร
ฉันมีโฟลเดอร์ขนาดใหญ่มากที่ฉันพยายามสร้างไฟล์เก็บถาวรของ tar ปัญหาคือฉันไม่มีพื้นที่ว่างมากพอที่จะจัดเก็บที่เก็บถาวรทั้งหมดดังนั้นฉันจึงต้องการสร้างที่เก็บถาวรขนาด 100-200GB พร้อมกันและถ่ายโอนทีละรายการไปยังที่เก็บข้อมูลบนคลาวด์ ฉันต้องสามารถควบคุมได้เมื่อสร้างชิ้นส่วนใหม่ดังนั้น HDD ของฉันจึงไม่เต็ม แต่คำสั่งทั้งหมดที่ฉันพบในการสร้าง tarballs แบบแยกมักจะสร้างทั้งหมดพร้อมกันในไดเร็กทอรีเดียวกัน
วิธีแก้ปัญหาที่ใกล้เคียงที่สุดที่ฉันพบมาจากคำถามนี้แต่การตอบกลับทั้งหมดใช้ฐานข้อมูลที่เก็บถาวรตามจำนวนไฟล์ไม่ใช่ขนาดที่สำคัญสำหรับกรณีการใช้งานของฉันเนื่องจากขนาดไฟล์ของฉันกระจายไม่สม่ำเสมอ
คำตอบ
คุณสามารถใช้tar
ด้วยตัวเลือกเหล่านี้:
--new-volume-script=COMMAND
--tape-length=N
ในตอนท้ายของแต่ละโวลุ่มจะเรียกสคริปต์ของคุณซึ่งจะมีตัวแปรสภาพแวดล้อมบางอย่างเพื่อให้ทราบว่าไดรฟ์ข้อมูลใดเพิ่งถูกประมวลผล ตรวจสอบหน้าคู่มือสำหรับรายการทั้งหมด แต่อย่างน้อยตัวแปร TAR_VOLUME ก็มีประโยชน์มากในกรณีที่คุณต้องเปลี่ยนชื่อไฟล์เอาต์พุตหรือติดตามไดรฟ์ข้อมูลปัจจุบัน:
TAR_VOLUME หมายเลขลำดับของวอลุ่ม tar กำลังประมวลผล (ตั้งค่าหากอ่านไฟล์เก็บถาวรแบบหลายไดรฟ์ข้อมูล)
หากการส่งคืนสคริปต์0
tar
จะดำเนินต่อไปมิฉะนั้นจะหยุดลง
ตัวอย่างเช่นสิ่งนี้จะสร้างแต่ละโวลุ่มโดยมีขนาดสูงสุด 20M เรียกสคริปต์ของคุณทุกครั้งที่ถึงขีด จำกัด :
tar cvf /tmp/volume.tar /path/to/files/ --new-volume-script=/path/to/myscript.sh --tape-length=20M
สคริปต์อาจเป็นแบบธรรมดาecho "Next volume";read
หรือคุณสามารถทำการถ่ายโอนได้ (เปลี่ยนชื่อโวลุ่มเนื่องจากเมื่อคุณออก/tmp/volume.tar
จะถูกเขียนทับ)
ในอีกด้านหนึ่งให้แน่ใจว่าได้ใช้แฟล็ก - หลายไดรฟ์ข้อมูล หากคุณไม่ทำเช่นนั้น tar จะหยุดด้วยข้อผิดพลาด (ฉันปล่อยไว้ในกรณีที่มีคนค้นหาข้อผิดพลาด):
tar: EOF ที่ไม่คาดคิดในไฟล์เก็บถาวร
tar: ข้อผิดพลาดไม่สามารถกู้คืนได้: กำลังออกตอนนี้
tar xvf /path/to/transferred.volume --multi-volume
เตรียมโวลุ่ม # 2 สำหรับ /path/to/transferred.volume และตีกลับ:
tar
จะแจ้งให้คุณใช้โวลุ่มใหม่ เมื่อคุณกด Enter /path/to/transferred.volume
จะเปิดขึ้นอีกครั้งและอื่น ๆ
ติดตามคำตอบที่ยอดเยี่ยมของ eduardo-trápaniด้านล่างนี้เป็นเวอร์ชันที่แก้ไขเล็กน้อยของสคริปต์ที่พบในหน้า GNUซึ่งรอการป้อนข้อมูลของผู้ใช้สำหรับแต่ละโวลุ่มและลองใหม่หากไม่พบไดรฟ์ข้อมูล:
เพื่อความสมบูรณ์นี่คือคำสั่งที่ใช้สร้างไฟล์เก็บถาวร:
tar cvf /tmp/volume.tar /path/to/files/ --new-volume-script=./myscript.sh --tape-length=1000M
และนี่คือคำสั่งที่ฉันใช้ในการแยกไฟล์เก็บถาวร:
tar xvf /tmp/volume.tar --multi-volume --new-volume-script=./myscript.sh
myscript.sh:
#!/bin/bash
# For this script it's advisable to use a shell, such as Bash,
# that supports a TAR_FD value greater than 9.
echo "Press enter to continue to next volume"
read
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
name=`expr $TAR_ARCHIVE : '\(.*\)-.*'` case $TAR_SUBCOMMAND in
-c) ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || echo "Failed to find volume" ;; *) exit 1 esac echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD
แก้ไข: ใช้ได้เฉพาะกับ GNU Tar ซึ่งสามารถติดตั้งบน macOS (w / Homebrew) โดย:
brew install gnu-tar
ในการใช้เป็น tar เริ่มต้นของคุณคุณจะต้องเพิ่มลงในเส้นทางของคุณดังนี้:
export PATH="$(brew --prefix)/opt/python/libexec/bin:$PATH"