3 điểm bởi GN⁺ 2023-09-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • Do xung đột tệp ẩn trong iCloud Drive, các đoạn văn vừa viết hoặc phần thay đổi mã gần đây đã biến mất, gây mất dữ liệu trước khi bản sao lưu kịp được lưu
  • Xung đột xảy ra trong tình huống hệ thống cho rằng trên Mac và iPhone có các phiên bản khác nhau của cùng một tệp, nhưng tệp gặp vấn đề chưa từng được mở trên iPhone
  • Dropbox giữ riêng các tệp bị xung đột, nhưng iCloud Drive không hiển thị chúng trong hệ thống tệp, nên chỉ có thể thấy popup lựa chọn trong các trình soạn thảo hỗ trợ xử lý xung đột
  • Trong các trình soạn thảo không có xử lý xung đột như Textifier, Xcode, Obsidian, iCloud sẽ chọn phiên bản để lưu; theo thời gian, phiên bản đúng có thể bị ghi đè trong bản sao lưu
  • Với dữ liệu quan trọng, an toàn hơn là để ngoài iCloud Drive và theo dõi thay đổi của các tệp cốt lõi bằng kho Git; Cloud Cub dành cho các tệp buộc phải còn trên iCloud cũng đang được phát triển

Xung đột tệp ẩn trong iCloud Drive

  • Khi đang viết tài liệu, đoạn văn vừa nhập bỗng biến mất; khi phát triển ứng dụng, Xcode hiển thị nhiều lỗi ở phần mã trước đó vẫn không có vấn đề
    • Các thay đổi gần đây trong nhiều tệp đã bị xóa
    • Mất mát xảy ra trước khi Time Machine hoặc Backblaze kịp lưu lại
  • Nguyên nhân là xung đột tệp mà iCloud Drive phát hiện
    • iCloud Drive cho rằng Mac và iPhone có các phiên bản khác nhau của cùng một tệp và không thể tự động hợp nhất
    • Tuy nhiên, các tệp bị ảnh hưởng chưa từng được mở trên iPhone
    • Vì thư mục Documents trên Mac đã được chuyển sang iCloud, các tệp đó nằm trong iCloud
  • Khi xảy ra xung đột phiên bản, Dropbox lưu kèm một tệp xung đột được đặt tên kiểu “(John Doe’s conflicted copy)”
  • iCloud Drive không hiển thị xung đột tương tự trong hệ thống tệp
    • Nếu mở tệp bằng trình soạn thảo hỗ trợ xử lý xung đột, một popup sẽ xuất hiện để hỏi muốn giữ phiên bản nào
    • Trong các trình soạn thảo không có xử lý xung đột như Textifier, Xcode, Obsidian, iCloud sẽ quyết định phiên bản nào được lưu trên ổ đĩa và trong bản sao lưu

Điều kiện khôi phục và cách ứng phó

  • Nếu thời gian trôi qua và bản sao lưu mới ghi đè lên bản sao lưu cũ từng chứa phiên bản đúng, nội dung có thể mất vĩnh viễn
  • Để khôi phục, cần mở tệp đó bằng trình soạn thảo hỗ trợ giải quyết xung đột
    • Trình soạn thảo được dùng làm ví dụ là iA Writer
    • Sau khi chuyển tệp ra khỏi iCloud Drive, cách này cũng không còn hữu ích
    • Trong thử nghiệm, nếu chuyển lại tệp chưa chỉnh sửa vào iCloud, popup phiên bản xung đột lại xuất hiện; nhưng nếu tệp đã được chỉnh sửa hoặc tiếp tục làm việc trên bản sao, điều này có thể không xảy ra
  • Cách ẩn xung đột phiên bản có thể trông thân thiện với người dùng, nhưng có thể khiến bạn không phát hiện mất dữ liệu cho đến tận vài năm sau khi mở lại tài liệu quan trọng
  • Cho đến khi iCloud Drive hiển thị xung đột phiên bản trong hệ thống tệp hoặc tại một vị trí trung tâm dễ truy cập, an toàn hơn là chuyển dữ liệu quan trọng ra khỏi iCloud Drive
  • Đang xây dựng Cloud Cub để phát hiện và giải quyết các xung đột đồng bộ ẩn cho những tệp buộc phải ở lại iCloud

1 bình luận

 
GN⁺ 2023-09-24
Các ý kiến trên Hacker News
  • Tôi từng gặp chuyện tương tự: trên iPhone của vợ tôi, đồng bộ đám mây trong Notes đang bật, tôi nghĩ là không cần nên tắt đi, thế là vợ tôi hỏi: “Tất cả ghi chú của em đâu rồi? Anh đã làm gì vậy?”
    Tôi toát mồ hôi lạnh, nhưng nhớ ra có một chiếc iPad cũng có ứng dụng Notes đã đồng bộ, nên lập tức mở nó và tắt WiFi để “giữ lại” các ghi chú
    Tôi gọi cho Apple, và nhân viên hỗ trợ đã tìm ra cách: sao chép rồi dán từng ghi chú sang một thư mục mới để chúng không bị xóa
    Đó là vài giờ khá căng thẳng, và tôi nghĩ Apple đáng ra phải đưa ra nhiều cảnh báo hoặc popup hơn về toàn bộ tác động của thao tác như vậy
    Ngoài ra, tôi cũng phát hiện hỗ trợ kỹ thuật của Apple về cơ bản có thể kết nối vào điện thoại kiểu “VNC” để xem và thay đổi cài đặt. Tôi nhớ là họ có yêu cầu quyền và tôi đã bấm “phê duyệt”, nhưng cho đến khi tận mắt thấy thì tôi cũng không biết có chức năng như vậy

    • Không phải tôi muốn bào chữa cho vấn đề này, nhưng thật đáng ngạc nhiên là nhân viên Apple đã hỗ trợ qua điện thoại về sự cố đồng bộ Notes và còn giúp khôi phục nữa
      Hơn nữa, họ vẫn giúp dù nguyên nhân có vẻ là lỗi của chính người dùng. Công ty tôi trả rất nhiều tiền cho các sản phẩm Google, nhưng Google gần như không có khả năng sẽ hỗ trợ qua điện thoại cho chuyện kiểu này
      Trước đây tôi từng nói chuyện với nhân viên phụ trách những thứ như kiểm soát truy cập, nhưng nếu nhờ giúp khi ghi chú Keep biến mất, có lẽ tôi sẽ nhận được một câu trả lời lịch sự kiểu biến đi. Thực tế là ghi chú Keep đôi khi cũng biến mất
    • Nếu đúng là tình huống tôi đang nghĩ tới, thì chỉ cần bật lại đồng bộ là mọi ghi chú có lẽ sẽ xuất hiện trở lại
    • Theo tôi nhớ, khi tắt đồng bộ sẽ có câu hỏi “Bạn có muốn tiếp tục không? Tất cả ghi chú iCloud sẽ bị xóa khỏi iPhone”
      Có vẻ vấn đề của vợ anh nằm ở phía người quản lý thiết bị iOS hơn là Apple
    • Việc hỗ trợ kỹ thuật của Apple có thể vào điện thoại kiểu “VNC” để xem nội dung và thay đổi cài đặt trông giống một lỗ hổng bảo mật tiềm tàng. Tôi tò mò không biết có cách nào tắt vĩnh viễn tính năng này không
    • Tôi muốn biết thêm chi tiết về tính năng “VNC” đó. Nó chỉ dành cho iPad hay iOS cũng có, yêu cầu phê duyệt có phải là popup hệ thống không, có ứng dụng có tên nào được mở không, có thấy họ thực sự làm gì trên màn hình không, và nó đã từng được ghi trong tài liệu ở đâu chưa
  • Tôi đồng ý cả triệu lần. Nhưng đây không chỉ là vấn đề của iCloud, mà có vẻ là khuynh hướng căn bản trong toàn bộ phần mềm của Apple
    Tôi cũng liên tục gặp chuyện này khi tô highlight PDF trong Books. Đôi khi mở lại PDF thì vài trang vừa đánh dấu gần đây đã biến mất
    Trong lúc làm việc thì có vẻ nó vẫn lưu liên tục, nhưng vì lý do nào đó không rõ, nó lại coi phiên bản 11:35 là phiên bản chính mới nhất chứ không phải bản 11:45
    Vấn đề Apple âm thầm ghi đè nội dung mới bằng phiên bản cũ đã kéo dài ít nhất 10 năm
    Tôi không hiểu bằng cách nào một lỗi nghiêm trọng như vậy lại lọt vào hệ thống ngay từ đầu và đến giờ vẫn chưa được sửa

    • Hai vấn đề khó nhất trong phần mềm là vô hiệu hóa cache, đặt tên, lỗi lệch một đơn vị, và tràn bộ đệm do cưỡng chế không có chỉ mục mảng
    • Tôi cũng gặp nhiều chuyện kỳ lạ khi tô highlight hoặc chú thích bằng phần mềm mặc định của macOS, và Skim là một lựa chọn thay thế khá tuyệt
      Nó miễn phí và dùng giấy phép BSD, nhưng cần nhớ rằng nếu muốn xem các thay đổi trong ứng dụng khác thì phải xuất ra PDF có kèm chú thích
      Nếu bạn đã mệt mỏi với nền cam làm chết độ tương phản của Apple hoặc việc không có bút highlight màu vàng thật sự, thì đáng để thử. Tôi không liên quan gì, chỉ biết ơn vì nó tồn tại
      https://skim-app.sourceforge.io/
    • Điểm này thú vị. Tôi dùng máy tính Apple lúc có lúc không, gần đây nhất là từ năm 2015 đến đầu năm nay, và tôi thấy nhận định rằng đây là vấn đề triết lý có lý
      Ở mảng phần cứng, tôi nhớ họ cũng từng khá tàn nhẫn khi cắt bỏ ổ đĩa mềm, ổ quang, và cả kiến trúc CPU tới ba lần
      Với iCloud, có vẻ thái độ đó cũng được áp dụng cho cả tệp. Tôi không nói tất cả đều xấu, nhưng càng lớn tuổi thì nó càng rời xa gu của tôi
    • Phần lớn hạ tầng iCloud được xây dựng trên các instance Cassandra. Có một bài báo liên quan khá hay, nhưng giờ tôi không tìm được
    • Nếu nó coi phiên bản 11:35 là mới nhất, có phải đồng hồ của một số máy chủ bị sai không?
  • Tác giả đề xuất dùng git, nhưng git không hợp với iCloud Drive
    Trước đây tôi từng đặt hàng trăm repository git trong iCloud Drive; khi có commit lớn, toàn bộ iCloud Drive hàng trăm GB lại đồng bộ lại với máy chủ Apple, và mất cả ngày
    Tôi đã cố đẩy vụ này lên khá cao trong Apple Support để giải quyết nhưng cuối cùng vẫn không xong. Giờ tôi để các repository git bên ngoài iCloud Drive
    Có vẻ hiện tượng này bị kích hoạt nếu nhanh chóng thay đổi đồng thời hàng trăm tệp trước khi lần đồng bộ thay đổi lớn trước đó hoàn tất

    • Tôi cứ tưởng gần như ai cũng biết không nên trộn các hệ thống quản lý phiên bản như git với cơ chế quản lý phiên bản dựa trên đám mây của các cloud drive như iCloud, OneDrive, Google Drive
      Hai thứ này không hợp nhau, và đặc biệt nếu nhiều thiết bị cùng đồng bộ với một cloud drive thì có thể sinh ra đủ loại hành vi kỳ lạ, không lường trước
    • Tôi là tác giả bài gốc. Cảm ơn đã chia sẻ
      Vấn đề là một ứng dụng tôi buộc phải dùng không hỗ trợ phương thức đồng bộ nào khác, nên một số tệp quan trọng phải dùng iCloud Drive
      Nếu không có git thì tôi còn không thể biết tệp nào đã bị thay đổi. Ngay cả có git, tôi cũng không chắc đã bắt được hết. Tôi nghĩ xung đột đồng bộ iCloud cũng có thể làm thay đổi nội dung git
    • Ngay từ đầu git cũng không hợp với đối tượng nhị phân lớn
    • Với các thư mục iCloud Drive quan trọng, tôi thường dùng một tiến trình tự động rsync chúng tới đâu đó, rồi ở phía đó dùng Git hoặc Dropbox để tự động quản lý phiên bản
      Cách này có lẽ không tốt cho dữ liệu rất lớn, nhưng những thứ nằm trong iCloud Drive mà tôi muốn quản lý phiên bản một cách mạnh tay thì phần lớn là văn bản hoặc nhỏ, nên việc giữ hai bản gần như không đáng kể
    • Nhân tiện, vì lý do tương tự, git cũng có thể hỏng theo cách khá kỳ quặc trên Dropbox. Trước đây tôi từng dùng git-remote-dropbox để thử dùng Dropbox như một git server
      [1] https://github.com/anishathalye/git-remote-dropbox
  • Lý do lớn hơn để không dùng iCloud Drive là mã hóa đầu cuối không được bật mặc định
    Mọi thứ bạn lưu ở đó đều có thể bị quản trị viên hệ thống Apple, nhân viên hỗ trợ, và những người có thể yêu cầu Apple cung cấp, chẳng hạn chính phủ Mỹ hiện thậm chí không cần lệnh khám xét, đọc được
    Tốt nhất là không dùng các dịch vụ không có mã hóa đầu cuối
    Hiện iCloud có mã hóa đầu cuối dạng tùy chọn, nhưng mặc định bị tắt và bị chôn sâu trong phần cài đặt nên hầu như không ai dùng
    Tôi dùng Syncthing để giữ tệp trên mọi thiết bị. Nó có mã hóa đầu cuối, là phần mềm tự do, và xử lý xung đột cũng như sao lưu phiên bản khá hợp lý
    Nó cũng hỗ trợ các thiết bị chỉ dùng để đồng bộ, không đáng tin cậy và không bao giờ thấy được bản rõ, nên bạn có thể đặt node trên VPS hoặc ở địa điểm bên ngoài một cách an toàn

    • Nói “đừng dùng dịch vụ không có mã hóa đầu cuối” rồi lại nói “iCloud cũng có mã hóa đầu cuối tùy chọn” thì tự mâu thuẫn. iCloud cũng có mã hóa đầu cuối
      Thuyết phục bạn bè hay gia đình bấm hai lần trong menu để bật thì dễ, nhưng thuyết phục họ cài và cấu hình Syncthing trên nhiều thiết bị thì không dễ
      Bênh vực Syncthing thì tốt thôi, nhưng nói iCloud Drive tệ chỉ vì họ không bật mặc định một thiết lập mà người dùng trung bình có thể mất toàn bộ dữ liệu nếu làm mất khóa thì hơi buồn cười
      Tôi dám chắc nếu là bà của bạn, bà sẽ muốn có thể gọi Apple để lấy lại ảnh bé Johnny khi quên mật khẩu hơn nhiều so với việc mặc định “an toàn hơn”
    • Cũng có phản biện thực tế về mã hóa đầu cuối. Với đa số người, khả năng mất toàn bộ dữ liệu vì quên hoặc làm mất khóa mã hóa cao hơn nhiều so với việc dữ liệu bị quản trị viên hay chính phủ rò rỉ
      Tôi cũng muốn bật mã hóa đầu cuối, nhưng không đủ tin bản thân sẽ không làm mất khóa
    • Tôi không thấy khác biệt gì giữa việc tự bật mã hóa đầu cuối trong iCloud và tự tìm dùng một nhà cung cấp hỗ trợ mã hóa đầu cuối mặc định
      Đây cũng không phải tình huống như nhắn tin, nơi bên kia cũng phải bật mã hóa đầu cuối
    • Rõ ràng bấm một nút trong iCloud để bật mã hóa đầu cuối có vẻ dễ hơn nhiều so với đổi hẳn nhà cung cấp lưu trữ đám mây
    • Có thể bật mã hóa đầu cuối bằng Bảo vệ dữ liệu nâng cao trong phần cài đặt tài khoản iCloud
      https://support.apple.com/en-ca/HT212520
  • Tôi cũng khá bực vì chuyện này. Tôi từng để thư viện Calibre trong thư mục Documents. Chứ còn để đâu nữa, lại còn kèm sao lưu miễn phí mà
    Nhưng cách đây không lâu tôi phát hiện vài thư mục sách trong thư viện đáng lẽ phải chứa tệp epub thật thì lại trống
    Cấu trúc thư mục và các mục trong cơ sở dữ liệu vẫn còn, nhưng chỉ tệp sách là biến mất. Không phải tất cả, mà ngẫu nhiên khoảng 40%
    Kết luận là đừng lưu những thứ bạn yêu thích trên iCloud Drive, đặc biệt là sách thì càng không

    • Một mẹo nửa đùa nửa thật, nhưng có lẽ bạn có thể tìm lại trên Libgen
  • Về đoạn “nếu mở tệp bằng trình biên tập hỗ trợ xử lý xung đột, một popup sẽ hỏi giữ phiên bản nào. Các trình biên tập không có xử lý xung đột như Textifier, Xcode, Obsidian thì để iCloud quyết định phiên bản nào sẽ được lưu trên đĩa và trong bản sao lưu”, tôi nghĩ các nhà phát triển ứng dụng khi thêm hỗ trợ iCloud mà không thêm cơ chế xử lý xung đột cũng có một phần trách nhiệm
    Nhưng tại sao Xcode, ứng dụng của chính Apple, lại không hỗ trợ xử lý xung đột? Phần mềm Apple nên đặt ra chuẩn mực cho lập trình viên bên thứ ba
    Nếu Apple cũng không xử lý xung đột phiên bản, thì dĩ nhiên các lập trình viên khác cũng sẽ không làm

    • Tôi là tác giả bài gốc. Có lẽ tôi đã viết hơi dễ gây hiểu nhầm. Điểm chính là chuyện này không phụ thuộc vào trình biên tập
      Bạn vẫn có thể mất nội dung dù dùng trình biên tập hỗ trợ xử lý xung đột
      Giả sử bạn viết gì đó, lưu lại, rồi đóng trình biên tập và không mở lại, iCloud có thể tráo nội dung tệp đó mà người dùng không có cách nào biết
      Cách duy nhất để không mất dữ liệu là tạo một kho Git, hoặc thường xuyên mở mọi tệp quan trọng bằng trình biên tập có hỗ trợ xử lý xung đột
    • Việc một ứng dụng không triển khai tính năng không có nghĩa là API hệ thống được phép âm thầm xóa dữ liệu quan trọng
      Đây không phải lỗi Xcode, mà là lỗi iCloud
  • Nếu bạn đặt tệp trong iCloud Drive, iPhone có thể xóa bản sao cục bộ bất cứ lúc nào
    Nếu muốn vừa đồng bộ tệp vừa chắc chắn 100% rằng có bản sao cục bộ, bạn phải đặt cùng tệp đó ở cả iCloud Drive và thư mục “Trên iPhone của tôi”
    Đây là lý do Apple Books, Numbers và mọi ứng dụng dùng iCloud Drive cứ liên tục xóa bản sao cục bộ
    Tôi từng làm một ứng dụng ghi chú đơn giản dùng iCloud Drive, và khi đóng ứng dụng, iCloud tham lam xóa luôn cả tệp txt 2KB. Đôi khi nó lại không xóa, nên khá ngẫu nhiên
    Dù còn rất nhiều dung lượng trống cũng không quan trọng, iCloud vẫn có thể xóa phiên bản cục bộ của các tệp bạn đang dùng liên tục
    Hỗ trợ lập trình viên của Apple nói họ không thể làm gì. Lập trình viên cũng không có cách đánh dấu để tệp tuyệt đối không bị xóa
    Trong tài liệu chính thức, Apple thực sự khuyên người dùng lưu mọi tệp trên iCloud Drive và không để bản sao trong “Trên iPhone của tôi”

  • Tôi từng gặp một vấn đề tương tự, Contacts biến mất. Chuyện xảy ra một thời gian, nhưng ban đầu tôi nghĩ là lỗi của mình
    Một sáng nọ, khi thấy liên hệ của người bạn mà tôi vừa nhắn tin tối hôm trước đã biến mất, tôi nhận ra vấn đề là iCloud
    Tôi liên hệ hỗ trợ Apple, và sau khi làm hết các bước hướng dẫn cơ bản, nhân viên phụ trách thừa nhận đây là vấn đề đã biết nhưng họ chưa tìm ra nguyên nhân gốc và cũng không có cách khắc phục
    Họ bảo tôi theo dõi danh bạ để biết việc xóa xảy ra lúc nào, nhưng nói rằng tôi phải cung cấp khoảng thời gian ở mức vài phút
    Lý do là “iPhone tạo rất nhiều log nên nếu không chỉ ra chính xác thời điểm xảy ra, kỹ sư không thể xem được”
    Tôi nghĩ việc thu hẹp lỗi xuống khoảng 8 giờ đã là khá ổn, nhưng nhân viên nói các kỹ sư yêu cầu độ chính xác ở mức vài phút
    Cuối cùng, như mọi lần tôi giao vấn đề khó cho hỗ trợ Apple, nhân viên nói sẽ liên hệ lại nhưng không bao giờ gọi lại, và chẳng có gì xảy ra
    Tôi chuyển danh bạ sang Google rồi thôi quên chuyện đó

  • Tôi đã xem xét vấn đề này. Apple, để tránh làm phiền người dùng quá nhiều vì các xung đột, đã chọn một chiến lược đồng bộ hóa làm mất dữ liệu người dùng trong một số điều kiện nhất định
    Tức là họ đã quyết định không dùng những kỹ thuật cũ hơn rất nhiều vốn có thể giữ lại các bản sửa đổi bị xung đột
    Phần tổng kết ở đây
    https://www.youtube.com/watch?v=q8k1q6kf1W0

    • Nếu muốn không làm phiền người dùng, họ cũng có thể đưa các tệp trùng lặp vào một nơi như thư mục xung đột
      Khi đó mọi người có thể tìm kiếm “Apple đã làm gì với tệp của tôi vậy?” và tìm cách khôi phục
      Nhân nói về việc không làm phiền, trong một bản cập nhật nào đó iOS đã âm thầm thay đổi cài đặt cuộc gọi của tôi, khiến điện thoại không đổ chuông với một số người gọi
      Đó là một kiểu tính năng vớ vẩn nhằm giúp tâm trí bình thản hơn, nhưng do đặc thù của NHS, tôi đã lỡ cuộc gọi từ bác sĩ phẫu thuật ung thư — người rất khó gọi lại — nên đã rất lo lắng
  • Trong trường hợp của tôi, iCloud Drive thỉnh thoảng đơn giản là không đồng bộ và bị kẹt ở đâu đó. Có thể xem trạng thái đồng bộ hóa từ biểu tượng iCloud Drive trong Finder
    Đóng tất cả ứng dụng trên macOS và iOS rồi chạy killall bird đôi khi sẽ giải quyết được. bird là dịch vụ đồng bộ hóa iCloud