저는 매우 제한적인 Linux 온보드를 갖춘 샘플 NAS 서버(QNAP TS-210)를 가지고 있습니다(Optware/IPKG를 사용하여 일부 개선은 있었지만). 저는 리눅스 초보자입니다. 인터넷을 검색한 후 rsync를 사용하여 NAS 하드 드라이브와 외부 USB 드라이브 간에 파일을 동기화하고 CRON을 사용하여 정기적으로 스크립트를 실행하는 나만의 백업 스크립트를 작성할 수 있었습니다.
며칠 전까지만 해도 모든 것이 괜찮았습니다. 백업 스크립트에 의해 생성된 이메일에는 IO error encountered -- skipping file deletion
백업 중인 많은 리소스(폴더)에 대한 정보가 포함되기 시작합니다. SSH를 통해 동일한 스크립트를 실행하면 " cannot send file with empty name in...
" 뒤에 " " 가 오는 오류 줄이 많이 나타납니다 rsync error: some files/attrs were not transferred (see previous errors)
.
내가 백업한 내용은 100% Windows에서 가져온 것입니다(저는 컴퓨터를 백업할 때 NAS만 사용합니다). 시스템은 빈 이름을 가진 파일 생성을 허용하지 않습니다. 이 문제는 며칠 동안만 발생했으며 몇 주(휴일) 동안 백업을 수정하지 않았습니다. 따라서 이것은 (내 NAS의) Linux 문제임에 틀림없습니다.
문제는 파일이 빈 이름으로 표시되는 원인이 무엇입니까?입니다. 어떻게 제거할 수 있습니까( cd
rsync 보고서에 언급된 폴더로 이동하여 작업을 수행 하면 ls -ls
"파일 이름이 비어 있음"과 같은 항목이 표시되지 않음) 다음 rsync 패스가 종료되지 않습니다. 오류가 발생합니다. 마지막으로, 앞으로 그러한 파일을 얻는 것을 방지하는 방법은 무엇입니까?
답변1
나는 이것이 rsync의 잘못이라고 생각하지 않습니다. 관련 코드가 있기 때문에 이것을 커널 수준 문제로 올바르게 표시했다고 생각합니다.rsync의 flist.c
소스내용은 다음과 같습니다.
1729 for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
1730 unsigned name_len;
1731 char *dname = d_name(di);
...
1746 if (dname[0] == '\0') {
1747 io_error |= IOERR_GENERAL;
1748 rprintf(FERROR_XFER,
1749 "cannot send file with empty name in %s\n",
1750 full_fname(fbuf));
실제로 이 코드 줄은 rsync 개발자가 추가한 것입니다.2007년 8월에 돌아왔습니다.특히 이 상황에서는 다음과 같습니다.
If readdir() gives us an empty name, reject it.
즉, readdir()
그 자체(디렉토리의 파일 목록을 반환하는 커널 함수)는 빈 문자열이 포함된 항목을 반환합니다. 규정에 따르면 이런 일은 절대 일어나서는 안 됩니다. 에서 인용공개 그룹 사양:
The readdir() function shall not return directory entries containing empty names.
ls
해당 디렉토리에서 작업을 수행하면 사라지기 때문에 일종의 일시적인 문제인 것처럼 들립니다. (또한 작동 readdir()
하고 사라지기 때문입니다.)
따라서 귀하의 질문에 대답하려면 다음을 수행하십시오.
원인은 파일 시스템 손상인 것으로 보입니다. 커널 드라이버 오류부터 하드웨어 오류까지 모든 것이 원인일 수 있습니다.동기화 중인 디렉터리가 기호 링크를 통해 액세스되는지 또는 문제가 될 수 있는 네트워크 경계 자체에 걸쳐 있는지 확인하는 것도 가치가 있습니다.
이를 제거하려면: 일반적인 파일 시스템 복구 체크리스트: fsck 등.
미래에 이것을 방지하려면: 재귀 목록을 미리 강제하도록 스크립트에 지시할 수 있다고 가정합니다. 그러나 이미 주의를 기울였으므로(그리고 휴가에서 돌아왔기 때문에) 올바른 일인 것 같습니다. 이런 일이 다시 발생하면 계속 지켜보고 상자 위로 뛰어오르세요.
이것이 도움이 되기를 바라며 행운을 빕니다!