ทำไมการแขวน 'df'


22

ฉันเพิ่งได้รับมีปัญหาในการทำงานdfซึ่งมันก็แฮงค์ straceเอาท์พุทที่นี่และในนั้นคุณจะเห็นว่าฉันฆ่าเพราะมันแค่นั่งอยู่ที่นั่น:

$ strace /bin/df
execve("/bin/df", ["/bin/df"], [/* 35 vars */]) = 0
brk(0)                                  = 0x8d03000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7840000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=90781, ...}) = 0
mmap2(NULL, 90781, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7829000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240o\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1401000, ...}) = 0
mmap2(NULL, 1415544, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb76cf000
mprotect(0xb7822000, 4096, PROT_NONE)   = 0
mmap2(0xb7823000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x153) = 0xb7823000
mmap2(0xb7826000, 10616, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7826000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76ce000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb76ce8d0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb7823000, 8192, PROT_READ)   = 0
mprotect(0xb785e000, 4096, PROT_READ)   = 0
munmap(0xb7829000, 90781)               = 0
brk(0)                                  = 0x8d03000
brk(0x8d24000)                          = 0x8d24000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=1534656, ...}) = 0
mmap2(NULL, 1534656, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7557000
close(3)                                = 0
open("/etc/mtab", O_RDONLY)             = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=708, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb783f000
read(3, "/dev/sda6 / ext4 rw,errors=remou"..., 4096) = 708
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0xb783f000, 4096)                = 0
statfs64("/", 84, {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=4805813, f_bfree=3325193, f_bavail=3081072, f_files=1220608, f_ffree=1007617, f_fsid={-1624337824, -871214780}, f_namelen=255, f_frsize=4096}) = 0
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb783f000
read(3, "# Locale name alias data base.\n#"..., 4096) = 2570
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0xb783f000, 4096)                = 0
open("/usr/share/locale/en_ZA.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_ZA/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
statfs64("/lib/init/rw", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=1280, f_bfree=1280, f_bavail=1280, f_files=215959, f_ffree=215956, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/run", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=102000, f_bfree=101823, f_bavail=101823, f_files=215959, f_ffree=215559, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/sys", 84, {f_type="SYSFS_MAGIC", f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/dev", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=508762, f_bfree=508762, f_bavail=508762, f_files=213490, f_ffree=213031, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/run/shm", 84, {f_type=0x1021994, f_bsize=4096, f_blocks=203999, f_bfree=203816, f_bavail=203816, f_files=215959, f_ffree=215955, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/dev/pts", 84, {f_type="DEVPTS_SUPER_MAGIC", f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/boot", 84, {f_type="EXT2_SUPER_MAGIC", f_bsize=1024, f_blocks=188403, f_bfree=150550, f_bavail=140822, f_files=48768, f_ffree=48525, f_fsid={-655942775, 1382872797}, f_namelen=255, f_frsize=1024}) = 0
statfs64("/home", 84, {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=66535124, f_bfree=6683145, f_bavail=3303357, f_files=16900096, f_ffree=16633097, f_fsid={-515912651, 307591087}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/sys/fs/fuse/connections", 84, {f_type=0x65735543, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs64("/home/wena/temp/mount", 84, ^C <unfinished ...>

เครื่องมือที่ล้มเหลวก็คือgnome-system-monitorซึ่งดูเหมือนว่าจะแขวนทันทีหลังจากเปิดตัว


coreutils รุ่นของฉันคือ 8.13-2 ทำงานใน Debian Unstable
tshepang

มีใครอีกที่นี่เพื่อป้อมปราการคนแคระ?
Cory Klein

@CoryKlein: นั่นคืออะไร?
tshepang

1
เกมในช่วงอัลฟาของการพัฒนาแรงบันดาลใจสำหรับ Minecraft บางครั้งมันก็หยุด การค้นหา google เพื่อหาทางออกให้กับแฮงค์นำฉันมาที่นี่
Cory Klein

คำตอบ:


23

ฉันเคยsshfsติดไดเรกทอรีจากเซิร์ฟเวอร์ ssh และการเชื่อมต่อเครือข่ายของฉันหายไป ดูเหมือนว่าdfกำลังพยายามแสดงรายการการเมานต์และแทนที่จะล้มเหลวอย่างสง่างามมันก็ติดขัด :(


2
คุณสามารถดำเนินการ unmount ที่ขี้เกียจด้วยumount -l /path-to/mountเพื่อหลีกเลี่ยงสิ่งนี้
ewwhite

12
มันไม่ได้ล้มเหลวอย่างสง่างามเพราะมันไม่ได้ล้มเหลวเลย: มันอดทนรอให้เซิร์ฟเวอร์ตอบกลับ
Gilles 'หยุดชั่วร้าย'

18
ไม่df -lทำงานหรือไม่
Abhishek A

1
@Gilles: ตัวอย่างคลาสสิกของปัญหาการหยุดชะงัก
casualunixer

ยังเกิดขึ้นกับ SMB mounts btw ที่เกี่ยวข้องมาก: ปัญหาเกี่ยวกับการติดตั้ง และระบบการโทรสถิติ
David Tonhofer

8

สาเหตุที่พบบ่อยที่สุดของซอฟต์แวร์เช่นการหยุดทำงานdfคือเมื่อพวกเขากำลังพยายามอ่านจากดิสก์ที่ตอบสนองไม่ถูกต้อง

ตรวจสอบผลลัพธ์จากdmesgเพื่อดูว่าเป็นกรณีนี้หรือไม่ไดรฟ์ที่ไม่สม่ำเสมอจะทำให้เกิดข้อผิดพลาดอย่างมาก

น่าเสียดายนี่เป็นปัญหาฮาร์ดแวร์และคุณอาจต้องเปลี่ยนไดรฟ์ทั้งหมด ฉันแนะนำให้คุณสำรองข้อมูลทุกอย่างที่ทำได้


4

ไม่ใช่กรณีที่นี่ แต่สำหรับบันทึกโปรดทราบว่าการใช้งาน GNU บางรุ่นของdf(ตั้งแต่รุ่น 7.3, แก้ไขใน 8.29 ( ด้วยการคอมมิทนี้ )) วางบนไฟล์ไพพ์ Fifo / ชื่อที่อ่านได้ซึ่งไม่มีตัวเขียน เปิดดูได้ที่https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29038

$ mkfifo fifo
$ strace df fifo
[...]
open("fifo", O_RDONLY|O_NOCTTY  # hanging there

การแก้ไขปัญหานี้คืออะไร?
karthik101

@ karthik101, ดูการแก้ไข: อัปเกรดเป็น 8.29 หรือไม่ใช้ df กับ fifos
Stéphane Chazelas

ติดตั้งจากแหล่งที่มาใช้งานได้ดี
karthik101

2

สาเหตุที่แท้จริงของฉันเป็นสิ่งผิดปกติ แต่ฉันจะพูดถึงมันในกรณีที่มีใครทำผิดพลาดเหมือนกัน ฉันใช้cifsใน/etc/auto.directUbuntu 16.04.4 (เพิ่งอัพเกรดเป็น 16.04) vers=1.0ฉันไม่ได้เพิ่ม

ความเข้ากันได้ย้อนหลัง - หนึ่งในตำนานที่ใหญ่ที่สุดในซอฟต์แวร์


0

ใช้งานได้จริงบน df 8.25 แก้ไขปัญหาหลังจากอัพเดตบน xenial


1
นี้ดูเหมือนจะขัดแย้งกับคำตอบของสเตฟาน คุณสามารถสำรองการอ้างสิทธิ์ได้หรือไม่?
Kusalananda

0

ฉันประสบปัญหาเดียวกันเริ่มต้นใหม่ด้านล่างบริการทำงานสำหรับฉัน

$ systemctl รีสตาร์ท proc-sys-fs-binfmt_misc.mount


0

อีกกรณีหนึ่งที่ไม่ครอบคลุมในคำตอบข้างต้น:

ในกรณีของผมใช้strace dfผมพบว่าdfถูกแขวนเมื่อพยายามที่จะระบบแฟ้ม:statfskeybase

$ strace df
...   # many lines omitted for brevity
statfs("/run/user/1000/keybase/kbfs", <--- hangs here
^Cstrace: Process 17510 detached

ออกจากระบบ (และลงชื่อเข้าใช้อีกครั้ง) เพื่อkeybaseแก้ไขปัญหานี้โดยเฉพาะ:

$ keybase logout
$ df  # doesn't hang anymore
...

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