จะผนวกข้อมูลในไฟล์ด้วย dd ได้อย่างไร?


19

ฉันต้องการผนวกข้อมูลใหม่ในไฟล์ที่เก็บใน SSD

dd if=/dev/shm/test of=/data/sdb/test bs=1G oflag=append

แต่ df -h แสดงคำสั่ง dd เขียนทับไฟล์ทดสอบเสมอผนวกข้อมูลใหม่ในไฟล์ทดสอบ ฉันก็ลอง

dd if=/dev/shm/test of=/data/sdb/test bs=1G conv=notrunc

มันไม่ทำงานเช่นกัน

คำตอบ:


12

เกี่ยวกับ:

 dd if=/dev/shm/test bs=1G >>/data/sdb/test

โซลูชันของคุณใช้งานได้ ขอบคุณ แต่คุณรู้ไหมว่าทำไมโซลูชันของฉันถึงใช้งานไม่ได้ ฉันได้ตรวจสอบหน้าคน ไม่สามารถหาเหตุผล ขอบคุณ
เมือง


1

ในFALLOC_FL_INSERT_RANGEตัวเลือกLinux kernel 4.1 ถูกเพิ่ม จากfallocate(2) หน้าคน :

การระบุการตั้งค่าสถานะ FALLOC_FL_INSERT_RANGE (มีให้ตั้งแต่ Linux 4.1) ในโหมดเพิ่มพื้นที่ไฟล์โดยการแทรกรูภายในขนาดไฟล์โดยไม่ต้องเขียนทับข้อมูลใด ๆ ที่มีอยู่ รูจะเริ่มที่ offset และทำต่อไปเพื่อ len ไบต์ เมื่อแทรกรูในไฟล์เนื้อหาของไฟล์ที่เริ่มต้นที่ offset จะถูกเลื่อนขึ้น (กล่าวคือเป็นออฟเซ็ตไฟล์ที่สูงกว่า) โดย len bytes การแทรกรูในไฟล์จะเพิ่มขนาดไฟล์เป็น len bytes

และเมื่อเร็ว ๆ นี้ตัวเลือกการสนับสนุนนี้ถูกเพิ่มไปที่util-linux:

   -i, --insert-range
          Insert a hole of length bytes from offset, shifting existing
          data.

ดังนั้นเมื่อutil-linuxเวอร์ชัน 2.30 จะเปิดตัวและลินุกซ์ distro ของคุณจะอัปเดตเป็นเวอร์ชั่นนี้เราจะสามารถเพิ่มขนาดไฟล์ในแฟลชได้โดยเรียกใช้:

fallocate -i -l 1G -o 128M /path/to/file

ที่128Mมีขนาดไฟล์ปัจจุบัน


1

มีวิธีที่ง่ายกว่าในการต่อท้ายช่องว่างลงในไฟล์

truncateเร็วกว่าวว หากต้องการขยายไฟล์ด้วย 10 ไบต์ให้ใช้:

 truncate -s +10 file.txt 

พบคำตอบใน: /server//a/343726/70242

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.