디렉터리 내용을 나열할 수 없습니다. 프로세스가 무기한 대기합니다.

디렉터리 내용을 나열할 수 없습니다. 프로세스가 무기한 대기합니다.

나는 Linux Mint 13을 사용하고 있으며 때때로 (드물게) 내 홈 디렉토리의 내용을 나열할 수 없는 경우가 있습니다. 내가 이것을 하려고 할 때:

$ cd
$ ls

그러면 ls무한정 기다릴 수 밖에 없습니다. 이는 다른 응용 프로그램이 디렉터리 내용을 읽으려고 시도하는 경우입니다. 결국 응용 프로그램을 종료해야 합니다.

나는 이 Linux 배포판을 약 1년 동안 사용해 왔으며 내 컴퓨터는 대개 항상 연중무휴로 켜져 있으며 몇 주 전에 처음으로 이 문제에 직면했습니다. 그런 다음 모든 응용 프로그램을 닫으려고 했지만 도움이 되지 않았습니다. 그런 다음 컴퓨터를 다시 시작했는데 도움이 되었습니다. 문제가 "수정"되었습니다.

오늘 또 만났습니다. 이번에는 원인에 대해 더 많은 정보를 찾아보려고 구글링해서 lsof사용해봤는데... 역시 무기한 기다립니다! 또한 lsof홈 디렉터리뿐만 아니라 다른 디렉터리를 시도해도 기다립니다. 라고 말하며 무기한 대기 $ lsof /path/to/any/file하게 되었습니다 .lsof

lsof만일을 대비해 원격 컴퓨터에서 SSH를 사용해 보았 더니 제대로 작동했습니다. 따라서 이것은 내 로컬 컴퓨터에서 더 깊은 문제인 것 같습니다.

(이유를 찾기 위해 지금은 컴퓨터를 다시 시작할 계획이 없습니다.)

UPD: 출력 섹션 dmesg:

Nov 12 14:35:36 dimon-progr kernel: [1305000.288107] INFO: task lsof:32463 blocked for more than 120 seconds.
Nov 12 14:35:36 dimon-progr kernel: [1305000.288112] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Nov 12 14:35:36 dimon-progr kernel: [1305000.288116] lsof            D c1044aa0     0 32463      1 0x00000084
Nov 12 14:35:36 dimon-progr kernel: [1305000.288122]  f10f3dc0 00000086 f10f3d68 c1044aa0 00000001 f3108ca0 c18e43c0 c18e43c0
Nov 12 14:35:36 dimon-progr kernel: [1305000.288132]  eea0a18a 0004a2af f45073c0 ee00a5e0 ed9c25e0 ee00a5e0 f10f3db4 f10f3d84
Nov 12 14:35:36 dimon-progr kernel: [1305000.288141]  c105be37 ee00a5e0 f10f3d9c c105c535 00000296 f10f3d9c f10f3d9c c1027378
Nov 12 14:35:36 dimon-progr kernel: [1305000.288150] Call Trace:
Nov 12 14:35:36 dimon-progr kernel: [1305000.288160]  [<c1044aa0>] ? try_to_wake_up+0x140/0x190
Nov 12 14:35:36 dimon-progr kernel: [1305000.288167]  [<c105be37>] ? recalc_sigpending+0x17/0x40
Nov 12 14:35:36 dimon-progr kernel: [1305000.288172]  [<c105c535>] ? __set_task_blocked+0x35/0x80
Nov 12 14:35:36 dimon-progr kernel: [1305000.288178]  [<c1027378>] ? default_spin_lock_flags+0x8/0x10
Nov 12 14:35:36 dimon-progr kernel: [1305000.288183]  [<c1576d2d>] ? _raw_spin_lock_irqsave+0x2d/0x40
Nov 12 14:35:36 dimon-progr kernel: [1305000.288188]  [<c1575135>] schedule+0x35/0x50
Nov 12 14:35:36 dimon-progr kernel: [1305000.288193]  [<c121755d>] request_wait_answer+0x6d/0x1f0
Nov 12 14:35:36 dimon-progr kernel: [1305000.288198]  [<c106a390>] ? add_wait_queue+0x50/0x50
Nov 12 14:35:36 dimon-progr kernel: [1305000.288203]  [<c1217758>] fuse_request_send+0x78/0xb0
Nov 12 14:35:36 dimon-progr kernel: [1305000.288208]  [<c121bd6c>] fuse_do_getattr+0x12c/0x280
Nov 12 14:35:36 dimon-progr kernel: [1305000.288213]  [<c113d80d>] ? complete_walk+0x7d/0x100
Nov 12 14:35:36 dimon-progr kernel: [1305000.288219]  [<c121c381>] fuse_update_attributes+0x41/0xa0
Nov 12 14:35:36 dimon-progr kernel: [1305000.288224]  [<c121c684>] fuse_getattr+0x44/0x50
Nov 12 14:35:36 dimon-progr kernel: [1305000.288228]  [<c11370e2>] vfs_getattr+0x42/0x70
Nov 12 14:35:36 dimon-progr kernel: [1305000.288233]  [<c121c640>] ? fuse_listxattr+0x130/0x130
Nov 12 14:35:36 dimon-progr kernel: [1305000.288237]  [<c113716c>] vfs_fstatat+0x5c/0x80
Nov 12 14:35:36 dimon-progr kernel: [1305000.288241]  [<c11371e0>] vfs_stat+0x20/0x30
Nov 12 14:35:36 dimon-progr kernel: [1305000.288245]  [<c1137456>] sys_stat64+0x16/0x30
Nov 12 14:35:36 dimon-progr kernel: [1305000.288251]  [<c100ceec>] ? syscall_trace_enter+0x15c/0x170
Nov 12 14:35:36 dimon-progr kernel: [1305000.288256]  [<c1576ed4>] syscall_call+0x7/0xb
Nov 12 14:35:36 dimon-progr kernel: [1305000.288260]  [<c1570000>] ? encode+0x26/0x2b

답변1

파일 시스템 드라이버가 응답하지 않으면 파일 시스템에 액세스하려는 프로세스가 무기한 차단됩니다.

저장 장치에 저장된 파일 시스템의 경우 응답하지 않는 주요 원인은 기본 하드웨어가 응답하지 않거나 제대로 작동하지 않기 때문입니다. 이로 인해 일반적으로 커널 로그( dmesgLinux 또는 해당 로그 파일에 표시 /var/log/kern.log)에 많은 수의 메시지가 발생하고 결국 시간 초과 및 I/O 오류(EIO)가 발생합니다.

네트워크가 다운되었거나, 서버 컴퓨터가 종료되었거나, 서버 프로그램이 실행되지 않거나 잘못 구성되었기 때문에 서버에서 응답이 없기 때문에 네트워크 지원 파일 시스템이 응답하지 않을 수 있습니다. 파일 시스템 유형, 드라이버 및 해당 구성에 따라 시간 초과 또는 무한 대기가 발생할 수 있습니다. 특히 NFS의 기본값은 무한 대기입니다. 상태 비저장이므로(작업 중에 서버가 실패하면 서버가 반환될 때 작업을 재개할 수 있음) 클라이언트는 서버가 응답할 때까지(서버가 응답하기 때문에) 결국 차단됩니다. 을 반환하면 파일 시스템이 정상적으로 작동합니다.)

FUSE 파일 시스템의 경우 이는 파일 시스템을 구현하는 프로그램에 따라 다릅니다. FUSE는 매우 유연하며 모든 프로그램에서 구현할 수 있습니다. 반면에 FUSE 파일 시스템은 내부적으로 그다지 견고하지 않거나 오작동할 수 있는 다른 많은 구성 요소에 의존하는 경우가 있습니다.

파일 시스템이 응답하지 않으면 먼저 파일 시스템 유형을 확인하십시오. Linux에서는 /proc/mounts마운트 지점을 찾으십시오. 마운트 지점은 두 번째 필드이고 파일 시스템 유형은 세 번째 필드입니다. 그러면 더 많은 단서를 찾을 수 있는 곳을 알 수 있습니다.

  • 저장 장치의 파일 시스템에 대해서는 커널 로그를 확인하십시오.
  • 네트워크 지원 파일 시스템의 경우 네트워크 연결을 확인하고 서버가 응답하는지 확인하십시오. 관련 로그는 일반적으로 서비스 로그(예 /var/log/syslog: /var/log/daemon.log네트워크 서비스별 로그) 에 있습니다 .
  • FUSE 파일 시스템의 경우 프로세스가 응답하는지 확인하십시오.

프로세스가 I/O에서 차단되고 파일 시스템이 복구될 때까지 기다리는 것을 포기한 경우 파일 시스템을 강제로 마운트 해제해야 할 수도 있습니다. FUSE 파일 시스템인 경우 이를 제공하는 프로세스를 종료하십시오. 모든 유형의 파일 시스템에 대해 Linux에서는 다음 명령을 사용하여 "지연된 마운트 해제"를 수행할 수 있습니다 umount -l. 이는 파일 시스템 드라이버가 계속 실행되는 경우에도 마운트 지점에서 파일 시스템을 분리합니다(예: 그렇게 하면 하드웨어와 계속 통신합니다.

관련 정보