Linux 용 Windows 하위 시스템을 사용하는 동안 Windows 프로그램으로 Linux 파일을 편집했는데 더 이상 액세스 할 수 없습니다


12

Windows의 Ubuntu에서 Bash를 사용 하거나 Linux 용 Windows 하위 시스템 내의 다른 Linux 배포 를 사용 하고 lxss있으며 Windows 편집기를 사용 하여 디렉토리 내의 Linux 파일을 편집했습니다 .

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

cat abc
cat: abc: Input/output error

왜 이런 일이 일어 났습니까? 이 문제를 해결하려면 어떻게해야합니까? 나중에 어떻게 피할 수 있습니까?

답변:


13

왜 이런 일이 일어 났습니까?

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

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

공식 WSL의 조언 이다

어떠한 상황에서도 Windows 앱, 도구, 스크립트, 콘솔 등을 사용하여 Linux 파일을 작성 및 / 또는 수정 하지 마십시오 .

Windows에서 Linux 파일을 작성 / 변경하면 데이터가 손상되거나 Linux 환경이 손상되어 배포판을 제거하고 다시 설치해야합니다!

이러한 이유로 (그러나 더 크고 더 붉은 색이며 더 많은 밑줄이 있습니다). "리눅스 파일"은 lxss디렉토리 내부의 모든 것을 의미합니다 . /mnt/c/...DrvFS 파일 시스템을 통해 Linux 내부에서 일반 Windows 파일을 수정할 수 있지만 그 반대는 아닙니다.

그러나, 1903 년 윈도우 10 버전은 새로운 메커니즘이 도입 않는 파일을 윈도우에서 안전하게 편집 할 수 있도록 당신이 그것에 대해 올바른 길을 갈만큼을. 이미 손상된 파일의 문제를 해결하는 데 도움이되지는 않지만 앞으로는 피할 수 있습니다.

이 문제를 해결하려면 어떻게해야합니까?

파일을 이미 편집했지만 액세스 할 수없는 경우에도 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 모두에서 액세스하려는 파일이 있으면 Windows 시스템의 다른 곳 에서 디렉토리 외부에 저장하십시오 lxss. 자동 DrvFS 상호 운용성을 사용하여 Linux에서 Windows 파일을 열 수 있습니다 . /mnt/c디렉토리에는 C : 드라이브의 모든 파일이 들어 있으며 Linux에서 읽고 쓸 수 있습니다.

  • 1903 Windows 릴리스 (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 기반 편집기가 신뢰할 수 없을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.