ออกก่อน/sys
เป็นระบบแฟ้มหลอก หากคุณดู/proc/filesystems
คุณจะพบรายการของระบบไฟล์ที่ลงทะเบียนซึ่งมีบางnodev
ส่วนอยู่ข้างหน้า นี้แสดงให้เห็นว่าพวกเขามีระบบไฟล์หลอก ซึ่งหมายความว่ามีอยู่ในเคอร์เนลที่ใช้งานเป็นระบบไฟล์ที่ใช้ RAM นอกจากนี้พวกเขาไม่จำเป็นต้องมีอุปกรณ์ป้องกัน
$ cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
...
เมื่อบูตเคอร์เนลจะเมานต์ระบบนี้และอัพเดตรายการเมื่อเหมาะสม udev
เช่นเมื่อฮาร์ดแวร์ใหม่ที่พบในระหว่างการบูตหรือโดยการ
ใน/etc/mtab
คุณมักจะพบว่าการติดตั้งโดย:
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
สำหรับกระดาษที่ดีในเรื่องที่อ่าน
Patric Mochel ของ - The sysfs ระบบแฟ้ม
สถิติของ / sys ไฟล์
หากคุณเข้าไปในไดเรกทอรีภายใต้/sys
และทำls -l
คุณจะสังเกตเห็นว่าไฟล์ทั้งหมดมีขนาดเดียว โดยทั่วไปแล้ว 4096 ไบต์ sysfs
นี้มีรายงานโดย
:/sys/devices/pci0000:00/0000:00:19.0/net/eth2$ ls -l
-r--r--r-- 1 root root 4096 Apr 24 20:09 addr_assign_type
-r--r--r-- 1 root root 4096 Apr 24 20:09 address
-r--r--r-- 1 root root 4096 Apr 24 20:09 addr_len
...
นอกจากนี้คุณสามารถทำstat
ไฟล์และสังเกตเห็นคุณสมบัติที่แตกต่างอื่น; ตรงบริเวณ 0 บล็อก inode ของ root (stat / sys) คือ 1 /stat/fs
โดยปกติจะมี inode 2 เป็นต้น
rsync กับ cp
คำอธิบายที่ง่ายที่สุดสำหรับความล้มเหลว rsync ของการซิงโครไนไฟล์หลอกอาจเป็นตัวอย่าง
สมมติว่าเรามีไฟล์ชื่อaddress
18 ไบต์ ls
หรือstat
ของแฟ้มรายงาน 4096 ไบต์
rsync
- เปิดไฟล์ descriptor, fd
- ใช้ fstat (fd) เพื่อรับข้อมูลเช่นขนาด
- ออกไปอ่านไบต์ขนาดคือ 4096 ที่จะเป็นสาย 253ของรหัสที่เชื่อมโยงโดย@mattdm
read_size == 4096
- ถาม; อ่าน: 4096 ไบต์
- อ่านข้อมูลสั้น ๆ คือ 18 ไบต์
nread == 18
read_size = read_size - nread (4096 - 18 = 4078)
- ถาม; อ่าน: 4078 ไบต์
- 0 ไบต์อ่าน (เป็นครั้งแรกอ่านบริโภคไบต์ทั้งหมดในไฟล์)
nread == 0
, สาย 255
- ไม่สามารถอ่าน
4096
ไบต์ บัฟเฟอร์ไม่เป็นศูนย์
ENODATA
ข้อผิดพลาดการตั้งค่า
- กลับ
- รายงานข้อผิดพลาด
- ลองใหม่ (เหนือวง)
- ล้มเหลว.
- รายงานข้อผิดพลาด
- ละเอียด.
ในระหว่างกระบวนการนี้มันจะอ่านไฟล์ทั้งหมด แต่หากไม่มีขนาดจึงไม่สามารถตรวจสอบความถูกต้องของผลการทดสอบได้
ซีพี
- เปิดไฟล์ descriptor, fd
- ใช้ fstat (fd) เพื่อรับข้อมูลเช่น st_size (ยังใช้ lstat และ stat)
ตรวจสอบว่าไฟล์มีแนวโน้มที่จะกระจัดกระจาย นั่นคือไฟล์ที่มีรู ฯลฯ
copy.c:1010
/* Use a heuristic to determine whether SRC_NAME contains any sparse
* blocks. If the file has fewer blocks than would normally be
* needed for a file of its size, then at least one of the blocks in
* the file is a hole. */
sparse_src = is_probably_sparse (&src_open_sb);
เนื่องจากstat
ไฟล์รายงานที่มีศูนย์บล็อกจะถูกจัดประเภทเป็นกระจัดกระจาย
พยายามอ่านไฟล์ตามขอบเขตการคัดลอก (วิธีที่มีประสิทธิภาพมากขึ้นในการคัดลอก
ไฟล์กระจัดกระจายปกติ ) และล้มเหลว
- คัดลอกด้วยการกระจายสำเนา
- เริ่มต้นด้วยขนาดการอ่านสูงสุดของ MAXINT
โดยทั่วไปแล้ว
18446744073709551615
ไบต์บนระบบ 32 บิต
- ถาม; อ่าน 4096 ไบต์ (ขนาดบัฟเฟอร์ที่จัดสรรในหน่วยความจำจากข้อมูลสถิติ)
- อ่านข้อมูลสั้น ๆ คือ 18 ไบต์
- ตรวจสอบว่าจำเป็นต้องมีหลุมหรือไม่
- เขียนบัฟเฟอร์ไปยังเป้าหมาย
- ลบ 18 จากขนาดการอ่านสูงสุด
- ถาม; อ่าน 4096 ไบต์
- 0 ไบต์เนื่องจากทั้งหมดถูกใช้ไปในการอ่านครั้งแรก
- คืนความสำเร็จ
- ตกลง. อัพเดตแฟล็กสำหรับไฟล์
- ละเอียด.
/sys/
?