ฉันได้รับข้อผิดพลาด Fsync ล้มเหลว ทำไม?


12

ฉันพยายามเปลี่ยน tcp timestamps ในอินสแตนซ์ Ec2 (ซึ่งเป็น Ubuntu 12.04) ผมเปิดขึ้นมาแก้ไขและเปลี่ยนค่าจาก1 0และเมื่อฉันพยายามบันทึกไฟล์ฉันได้รับข้อผิดพลาดนี้:

/proc/sys/net/ipv4/tcp_timestamps" E667: Fsync failed

ฉันใหม่สำหรับ Ubuntu มีใครช่วยฉันได้บ้าง

คำตอบ:


27

โปรแกรมแก้ไขของคุณอาจทำสิ่งที่ตลกกับไฟล์นั้น (ไฟล์ใน / proc ไม่ใช่ไฟล์จริงพวกมันเป็นส่วนต่อประสานกับระบบปฏิบัติการระดับล่าง) ในขณะที่การเปลี่ยนแปลงอาจทำงานได้ดีวิธีปกติในการอัปเดตสิ่งต่าง ๆ ใน proc โดยตรงด้วยคำสั่งเชลล์เช่น:

echo 1 | sudo dd of=/proc/sys/net/ipv4/tcp_timestamps

หากคุณต้องการให้การตั้งค่านี้ถูกนำไปใช้ทุกครั้งที่คุณบู๊ตให้สร้างไฟล์ชื่อ/etc/sysctl.d/tcp-timestamps.confที่มีข้อมูลต่อไปนี้:

net.ipv4.tcp_timestamps = 1

3
รูปแบบนี้ (echo VALUE | sudo dd of = / path / to / file) มีประโยชน์มาก ขอบคุณมาก!
Malcolm

1
ทำงานให้ฉันด้วยสำหรับสิ่งนี้และเพื่อตั้งค่าพารามิเตอร์เคอร์เนลอื่น ๆ สิ่งนี้ช่วยในการตั้งค่าพารามิเตอร์เคอร์เนลอื่นที่เรียกว่า allow_tpm echo 1 | sudo dd ของ = / sys / โมดูล / libata / พารามิเตอร์ / allow_tpm

1
มีจุดประสงค์dd ofอะไร? ทั้งหมดที่ฉันเข้าใจคือเสียงสะท้อนและท่อ แต่ฉันไม่เข้าใจว่าทำไมต้องใช้ dd ทำไมไม่ลอง>แทนล่ะ
Adelin

1
@Adelin ddคือมีการดำเนินการเขียนเป็น root ส่วนที่เหลือของไพพ์ไลน์คำสั่งไม่จำเป็นต้องได้รับสิทธิพิเศษดังนั้น dd เป็นส่วนเดียวที่เราเรียกใช้ภายใต้ sudo หากเราต้องรันทั้งเชลล์ในฐานะรูทการ>เปลี่ยนทิศทางจะไม่เป็นไร แต่ฉันต้องการลดสิ่งที่รันด้วย privs ราก
Jeremy Kerr

7

บางครั้งเราก็ได้รับข้อผิดพลาดเดียวกันแน่นอน หลังจากเสียเวลาไปหลายนาทีในการตรวจสอบพบว่าไม่มีที่ว่างเหลืออยู่บนอุปกรณ์ คุณสามารถตรวจสอบว่าเป็นกรณีสำหรับคุณ ลองเพิ่มพื้นที่เก็บข้อมูลเพื่อแก้ไขปัญหาอย่างรวดเร็ว

หมายเหตุ: นี่อาจไม่ใช่คำอธิบายทางเทคนิคที่ดีที่สุดของปัญหา แต่อาจช่วยในการแก้ไขปัญหาได้อย่างรวดเร็ว คำตอบที่ได้รับการยืนยันอธิบายรายละเอียดเพิ่มเติมนี้ คำตอบของฉันคือการแบ่งปันวิธีแก้ไขปัญหานี้


2
ไม่ทราบว่าทำไมคุณถึงถูกลงคะแนน เป็นผลครั้งแรกใน google และแก้ไขปัญหาของฉันดังนั้นขอบคุณมาก!
Johannes Stadler

3

ฉันเห็นว่าคำตอบนี้ถูกต้องมานานแล้ว แต่มีคำสั่งที่ง่ายกว่า:

sudo sysctl net.ipv4.tcp_timestamps=1

นอกจากนี้คุณสามารถทำเช่นเดียวกันกับการตั้งค่าอื่น ๆ เช่น:

sudo sysctl vm.admin_reserve_kbytes=16384

อย่างที่คุณเห็นคุณสามารถแก้ไขไฟล์ใด ๆ ใน / proc / sys / โดยระบุตำแหน่งที่เหลือในขณะที่เปลี่ยนตัวคั่นจาก "/" เป็น "

ตัวอย่าง: "/ proc / sys / net / ipv4 / tcp_timestamps" ถูกระบุเป็น "net.ipv4.tcp_timestamps"


1

Fsync ล้มเหลวคำเตือน: ไฟล์ต้นฉบับอาจสูญหายหรือเสียหายอย่าออกจากตัวแก้ไขจนกว่าไฟล์จะถูกเขียนสำเร็จ!

อาจเป็นปัญหาพื้นที่เนื่องจากการล้างไฟล์สองไฟล์ให้ฉัน

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