Tôi đã chỉnh sửa tệp Linux bằng chương trình Windows trong khi sử dụng Hệ thống con Windows cho Linux và bây giờ tôi không thể truy cập tệp này nữa.


12

Tôi đang sử dụng Bash trên Ubuntu trên Windows hoặc một bản phân phối Linux khác trong Hệ thống con Windows cho Linux và tôi đã chỉnh sửa tệp Linux trong lxssthư mục bằng trình chỉnh sửa Windows.

Bây giờ bất cứ khi nào tôi hoặc một chương trình cố gắng truy cập nó từ Linux, tôi đều gặp lỗi "lỗi đầu vào / đầu ra" hoặc tệp chỉ biến mất hoàn toàn mặc dù tôi có thể thấy nó chắc chắn có trong File Explorer.

cat abc
cat: abc: Input/output error

Tại sao điều này đã xảy ra? Tôi có thể làm gì để khắc phục nó? Làm thế nào tôi có thể tránh nó trong tương lai?

Câu trả lời:


13

Tại sao điều này đã xảy ra?

Do các hệ thống tệp Unix thông thường hoạt động khác với các hệ thống tệp Windows, WSL lưu trữ thêm thông tin về các thuộc tính cụ thể của các tệp trong các thuộc tính mở rộng của các tệp Windows được sử dụng để thể hiện chúng. Các chương trình Windows thông thường không biết về các thuộc tính này và sẽ không giữ chúng khi bạn chỉnh sửa tệp. Thông tin quan trọng về tập tin bị mất khi điều đó xảy ra.

Khi WSL cố đọc một tệp và nó không thể tìm thấy các thuộc tính mà nó mong đợi, một lỗi sẽ được báo cáo, giống như những gì sẽ xảy ra nếu một hệ thống tệp gốc bị hỏng. Nếu nó không bao giờ nhìn thấy các thuộc tính trên một tệp ở vị trí đầu tiên, thì tệp đó chỉ được coi là không tồn tại và sẽ không hiển thị trong danh sách tệp.

Các lời khuyên WSL chính thức

KHÔNG, trong mọi trường hợp , tạo và / hoặc sửa đổi các tệp Linux bằng các ứng dụng, công cụ, tập lệnh, bảng điều khiển Windows, v.v.

Tạo / thay đổi tệp Linux từ Windows có thể sẽ dẫn đến hỏng dữ liệu và / hoặc làm hỏng môi trường Linux của bạn yêu cầu bạn gỡ cài đặt & cài đặt lại bản phân phối của bạn!

vì lý do này (nhưng lớn hơn, và đỏ hơn, và có nhiều gạch chân hơn). "Tập tin Linux" có nghĩa là bất cứ điều gì trong lxssthư mục của bạn . Bạn có thể sửa đổi các tệp Windows thông thường từ bên trong Linux thông qua /mnt/c/...hệ thống tệp DrvFS , nhưng không phải ngược lại.

Tuy nhiên, năm 1903 Windows 10 ra mắt giới thiệu một cơ chế mới mà không cho phép các file được chỉnh sửa một cách an toàn từ Windows miễn là bạn đi về nó một cách đúng đắn. Điều đó không giúp khắc phục vấn đề của các tệp đã bị hỏng, nhưng nó có thể tránh được trong tương lai.

Tôi có thể làm gì để khắc phục nó?

Nếu bạn đã chỉnh sửa một tệp và bây giờ bạn không thể truy cập tệp đó, bạn vẫn có thể đọc nội dung từ chính Windows và khôi phục tệp theo cách đó.

Để làm điều đó, bạn sẽ cần:

  1. Điều hướng trở lại vị trí trong AppData\Local\lxssthư mục mà tệp đang sử dụng File Explorer và di chuyển tệp ra một nơi khác trên ổ đĩa của bạn, như máy tính để bàn của bạn.
  2. Khởi động lại WSL sau đó để xóa bộ đệm trong của nó, điều bạn có thể làm chỉ bằng cách đóng tất cả các thiết bị đầu cuối của bạn và mở một thiết bị mới. Nếu bạn có các tiến trình máy chủ nền đang chạy, bạn cũng sẽ cần phải dừng các tiến trình đó.
  3. Trong Linux một lần nữa, đi đến vị trí ban đầu của tệp bị hỏng. Bây giờ nó sẽ không hiển thị nếu bạn chuyển thành công tệp ra khỏi đường. Chạy lsđể kiểm tra.
  4. Kiểm tra tệp bạn đã chuyển đi: chạy

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

    để xem nội dung gốc của tập tin.

  5. Nếu mọi thứ đã hoạt động cho đến nay, bây giờ bạn có thể sao chép tệp đó trở lại vị trí mà bạn mong đợi:

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

    Các cplệnh sẽ gây WSL để khôi phục lại các thuộc tính ẩn cần thiết vào file.

Các hướng dẫn này sẽ hoạt động cho các tệp dữ liệu thông thường, nhưng nếu đó là tệp hệ điều hành quan trọng, bạn có thể cần phải cài đặt lại hoàn toàn . Đối với nhiều chương trình không quan trọng, xóa tệp bị hỏng khỏi Windows và cài đặt lại chương trình bằng trình quản lý gói sẽ là đủ. Bạn sẽ không thể xóa tệp từ bên trong Linux khi tệp bị hỏng.

Làm thế nào tôi có thể tránh điều này trong tương lai?

Không bao giờ thao tác bất kỳ tệp nào trong lxssthư mục từ Windows. Thay thế:

  • Nếu bạn có một tập tin mà bạn muốn truy cập từ cả Windows và Linux, lưu trữ nó bên ngoài các lxssthư mục, bất cứ nơi nào khác trên hệ thống Windows của bạn. Bạn có thể mở các tệp Windows từ Linux bằng khả năng tương tác DrvFS tự động : /mnt/cthư mục chứa tất cả các tệp từ ổ C: của bạn và chúng có thể được đọc và ghi từ Linux.

  • Bắt đầu từ phiên bản Windows 1903 (tháng 3 năm 2019), WSL bao gồm một máy chủ tệp đặc biệt giúp các tệp của bạn có sẵn cho tất cả các ứng dụng Windows. Nếu bạn chạy

    explorer.exe .
    

    sau đó File Explorer sẽ mở ra hiển thị thư mục Linux hiện tại - bạn có thể sao chép các tệp trong hoặc ngoài cửa sổ đó hoặc chỉnh sửa chúng với bất kỳ ứng dụng nào. Đường dẫn thư mục sẽ giống như \\wsl$\Ubuntu\var\www: \\wsl$\phần gửi truy cập tệp thông qua một đường dẫn thay thế, an toàn.

    Nếu bạn có thể, đây sẽ là con đường tốt nhất phía trước (hoặc đôi khi là điểm ở trên). Đối với các bản phát hành cũ hơn, đọc tiếp.

  • Nếu có một tệp bạn cần ở một nơi cụ thể, như tệp cấu hình và bạn muốn chỉnh sửa nó từ Windows, bạn có thể tạo một liên kết tượng trưng từ bên trong Linux đến vị trí thực của tệp hoặc thư mục:

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

    Điều này sẽ hoạt động miễn là tệp không cần phải có bất kỳ quyền hoặc thuộc tính cụ thể nào trong Linux (như một khóa thực thi hoặc khóa SSH).

  • Ngoài ra, và có lẽ tốt hơn, chỉnh sửa các tệp Linux của bạn bằng trình chỉnh sửa Linux trong thiết bị đầu cuối. nano, vimemacstất cả đều có sẵn và hoạt động tốt theo WSL, mặc dù tất cả chúng đều có những đặc điểm riêng.

  • Nếu bạn phải chỉnh sửa tệp bằng chương trình Windows, bạn không có phiên bản Windows đủ gần đây và bạn không thể biến nó thành một liên kết tượng trưng, ​​tạo một bản sao ở nơi khác để chỉnh sửa và sao chép lại từ /mnt/cđó, giống như sửa lỗi ở trên hoặc sử dụng kiểm soát phiên bản để đồng bộ hóa các chỉnh sửa của bạn trên nhiều vị trí.

Từ một số thử nghiệm, Notepad thông thường dường như bảo tồn các thuộc tính cần thiết, nhưng nó không hiểu các kết thúc dòng Unix nên bạn có thể tự làm hỏng nội dung và tôi sẽ không dựa vào hành vi đó trong mọi trường hợp. Bởi vì đây là một hoạt động không được hỗ trợ rõ ràng và không có giấy tờ nên không có trình soạn thảo dựa trên Windows nào đáng tin cậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.