왜 이런 일이 발생합니까?

왜 이런 일이 발생합니까?

나는 그것을 사용하고 있다Windows의 Ubuntu에서 Bash또는 다른 Linux 배포판Linux용 Windows 하위 시스템lxssWindows 편집기를 사용하여 디렉토리의 Linux 파일을 편집했습니다.

이제 나 또는 프로그램이 Linux에서 해당 파일에 액세스하려고 할 때마다 "입력/출력 오류" 오류가 발생하거나 파일 탐색기에 해당 파일이 확실히 존재한다는 것을 알 수 있음에도 불구하고 파일이 완전히 사라집니다.

cat abc
cat: abc: Input/output error

왜 이런 일이 발생합니까? 문제를 해결하려면 어떻게 해야 하나요? 앞으로는 어떻게 이런 일을 피할 수 있나요?

답변1

왜 이런 일이 발생합니까?

기존 Unix 파일 시스템은 Windows 파일 시스템과 다르게 작동하므로 WSL확장된 속성에 Linux 특정 파일 속성에 대한 추가 정보를 저장합니다.이를 나타내는 데 사용되는 Windows 파일 수입니다. 일반 Windows 프로그램은 이러한 속성을 인식하지 못하며 파일을 편집할 때 해당 속성을 유지하지 않습니다. 이런 일이 발생하면 파일에 대한 중요한 정보가 손실됩니다.

WSL이 파일을 읽으려고 하지만 필요한 속성을 찾을 수 없으면 기본 파일 시스템이 손상된 경우와 마찬가지로 오류가 보고됩니다. 처음에 파일의 속성이 표시되지 않으면 해당 파일은 존재하지 않는 것처럼 처리되어 파일 목록에 표시되지 않습니다.

이것WSL 공식 조언

원하지 않는다,어쨌든, Windows 애플리케이션, 도구, 스크립트, 콘솔 등을 사용하여 Linux 파일을 생성 및/또는 수정합니다.

Windows에서 Linux 파일을 생성/변경하면 데이터 손상 및/또는 Linux 환경이 손상될 수 있으므로 배포판을 제거하고 다시 설치해야 합니다!

이러한 이유 때문입니다(그러나 더 크고, 더 붉고, 밑줄이 더 많습니다). "Linux 파일"은 lxss디렉토리에 있는 모든 것을 의미합니다. 다음 명령을 사용하여 Linux 내에서 일반 Windows 파일을 수정할 수 있습니다./mnt/c/...DrvFS 파일 시스템, 그러나 그 반대는 아닙니다.

그러나 1903 버전의 Windows 10에는 새로운 메커니즘이 도입되었습니다.하다Windows에서 파일을 안전하게 편집하도록 허용올바른 방법으로 수행하는 한. 이는 손상된 파일 문제를 해결하는 데 도움이 되지 않지만 앞으로 이러한 상황을 방지할 수 있습니다.

문제를 해결하려면 어떻게 해야 하나요?

파일을 편집했지만 지금은 액세스할 수 없는 경우에도 Windows 자체에서 내용을 읽고 해당 방식으로 파일을 복구할 수 있습니다.

이렇게 하려면 다음이 필요합니다.

  1. AppData\Local\lxss파일 탐색기를 사용하여 디렉터리의 파일 위치 로 다시 이동 하고 바탕 화면과 같은 드라이브의 다른 위치로 파일을 이동합니다.
  2. 내부 캐시를 지우려면 나중에 WSL을 다시 시작하고, 이를 수행하려면 모든 터미널을 닫고 새 터미널을 엽니다. 백그라운드 서버 프로세스가 실행 중인 경우 해당 프로세스도 중지해야 합니다.
  3. Linux에서 다시 손상된 파일의 원래 위치로 이동합니다. 파일을 성공적으로 이동했다면 이제 전혀 표시되지 않습니다. 실행해서 ls확인해 보세요.
  4. 이동한 파일 확인: 실행

    cat /mnt/c/Users/.../Desktop/abc
    

    파일의 원본 내용을 봅니다.

  5. 지금까지 모든 것이 순조롭게 진행되었다면 이제 파일을 원하는 위치에 다시 복사할 수 있습니다.

    cp /mnt/c/Users/.../Desktop/abc ~/alphabet/abc
    

    cp명령을 사용하면 WSL이 파일에서 필요한 숨겨진 속성을 복원합니다.

이 지침은 일반 데이터 파일에 적용되지만중요한 운영 체제 파일인 경우 완전히 다시 설치해야 할 수도 있습니다.. 중요하지 않은 많은 프로그램의 경우 Windows에서 손상된 파일을 삭제하고 패키지 관리자를 사용하여 프로그램을 다시 설치하는 것으로 충분합니다. 파일이 손상되면 Linux 내에서 삭제할 수 없습니다.

앞으로는 어떻게 이런 일을 피할 수 있나요?

lxssWindows에서 이 디렉터리의 파일을 조작하지 마십시오. 대신에:

  • Windows 및 Linux에서 파일에 액세스하려면 해당 파일을 저장하세요.외부디렉토리 lxss또는 Windows 시스템의 다른 위치. 다음 명령을 사용하여 Linux에서 Windows 파일을 열 수 있습니다.자동 DrvFS 상호 운용성: 이 /mnt/c디렉터리에는 C: 드라이브의 모든 파일이 포함되어 있으며 Linux에서 읽고 쓸 수 있습니다.

  • Windows 버전 1903부터(2019년 3월), WSL파일을 사용할 수 있게 해주는 특수 파일 서버 포함모든 Windows 응용 프로그램에 적용됩니다. 당신이 달리면

    explorer.exe .
    

    그러면 파일 탐색기가 열리고 현재 Linux 디렉터리가 표시됩니다. 이 창에서 파일을 복사하거나 응용 프로그램을 사용하여 편집할 수 있습니다. 디렉터리 경로는 다음과 같습니다 \\wsl$\Ubuntu\var\www. 이 \\wsl$\섹션은 대체 보안 경로를 통해 파일 액세스를 보냅니다.

    당신에게 능력이 있다면이것이 앞으로 나아가는 최선의 방법일 것이다(또는 때로는 위의 내용 중 일부). 이전 버전의 경우 계속해서 읽어보세요.

  • 특정 위치(예: 구성 파일)에 파일을 저장해야 하고 이를 Windows에서 편집하려는 경우 Linux 내에서 파일 또는 디렉터리의 실제 위치에 대한 심볼릭 링크를 만들 수 있습니다.

    ln -s /mnt/c/.../abc ~/.config/xyz/abc
    

    파일이 Linux에서 특정 권한이나 속성(예: 실행 파일 또는 SSH 키)을 요구하지 않는 한 이 방법을 사용할 수 있습니다.

  • 또는 더 나은 방법은 터미널에서 Linux 편집기를 사용하여 Linux 파일을 편집하는 것입니다. nano, vim, 및 emacs모두 고유한 특징이 있지만 모두 쉽게 사용할 수 있고 WSL에서 잘 작동합니다.

  • Windows 프로그램을 사용하여 파일을 편집해야 하는 경우 Windows의 최신 버전이 없고 심볼릭 링크로 설정할 수 없는 경우, 다른 곳에 복사본을 만들어 편집한 다음 다시 복사하면 /mnt/c문제가 해결됩니다. 위의 문제를 해결하거나 버전 제어를 사용하여 여러 위치에서 편집 내용을 동기화하세요.

일부 실험에 따르면 일반 메모장은 필요한 속성을 유지하지만 Unix 줄 끝을 이해하지 못하므로 사용자가 직접 작업을 손상시킬 수 있으므로 어떤 경우에도 이 동작에 의존하지 않을 것입니다. 이는 명시적으로 지원되지 않고 문서화되지 않은 작업이므로 Windows 기반 편집기는 신뢰할 수 없습니다.

관련 정보