ブログ - OneDriveの同期がおかしくなった件で問題点を探してみた
Office 365を使っていると1TBのストレージが着いてくるので,自分が他の端末で共有したいファイルはそこに置いている.
先日,MacPro 2013 1号機からMacPro 2013 2号機にデータを移行する際に,Time Machineを使ったのだけど,その際にTime Machine経由でリカバリしたので再度クラウド側との同期の際に大量に不整合が出てしまった.
クラウドストレージが面倒なのは,クラウド側にファイルが残っているだろうと考え重複しているから不要と思っているファイルを捨てると,それもクラウド側で反映されて消えてしまう問題が発生する.OneDriveでは大量にファイルを消す場合は警告が出るけど,もしかしてオリジナルファイル毎消えてしまうと困るので慎重にしたい.
--
今回,同期がされなくなったのは,1号機と2号機でアカウントのUIDが変わっている事で,権限が不整合ができているようだった.
OneDriveの実体が保存されているフォルダをFinderのプロパティから情報を確認し,全ファイルのオーナーを変更したら,いくつかのフォルダが同期されるようになった.

アクセス権限の設定
しかしそれでも何か同期できない問題が出る.

OneDriveを終了・起動する都度,この1つのファイルをダウンロードしてくるのだけどファイルは存在しない.
明示的にエラーも出ないので,どうやって調べれば良いのかわからないのだけど,ログを取得する方法があった.
先日,MacPro 2013 1号機からMacPro 2013 2号機にデータを移行する際に,Time Machineを使ったのだけど,その際にTime Machine経由でリカバリしたので再度クラウド側との同期の際に大量に不整合が出てしまった.
クラウドストレージが面倒なのは,クラウド側にファイルが残っているだろうと考え重複しているから不要と思っているファイルを捨てると,それもクラウド側で反映されて消えてしまう問題が発生する.OneDriveでは大量にファイルを消す場合は警告が出るけど,もしかしてオリジナルファイル毎消えてしまうと困るので慎重にしたい.
--
今回,同期がされなくなったのは,1号機と2号機でアカウントのUIDが変わっている事で,権限が不整合ができているようだった.
OneDriveの実体が保存されているフォルダをFinderのプロパティから情報を確認し,全ファイルのオーナーを変更したら,いくつかのフォルダが同期されるようになった.

アクセス権限の設定
しかしそれでも何か同期できない問題が出る.

OneDriveを終了・起動する都度,この1つのファイルをダウンロードしてくるのだけどファイルは存在しない.
明示的にエラーも出ないので,どうやって調べれば良いのかわからないのだけど,ログを取得する方法があった.
メニューバーにあるOneDrive→歯車→基本設定→バージョン情報と順に開くと次のような画面になる.

ログの保存ボタンを押すと,次のように.

ファイル名から情報収集するシェルスクリプトの模様.それが権限で実行できない.
CollectLogs.commandは次の場所にある.

シェルスクリプトの中身を確認.

まずは,このシェルスクリプトが収集先のデータにアクセスできるよう,ファイルシステムへのアクセス権限(フルディスクアクセス)を付与する.
そしてコマンドライン上で実行してみた.
情報を収集して,結果をZIPファイルにしてデスクトップに保存される.

ZIPファイルを展開して,中身を確認.

このエラーファイルを確認.

Failed to remove quarantine bitsと記録されている.
macOSのセキュリティ機能である「クアランティン属性(quarantine bits)」がOneDriveによって解除できなかったこと
引用: ファイルシステム上で,同期失敗しているファイルを確認してみる.

不要なファイルだったのでrmコマンドで削除.するとOneDriveの同期が復活しました.

ログの保存ボタンを押すと,次のように.

ファイル名から情報収集するシェルスクリプトの模様.それが権限で実行できない.
CollectLogs.commandは次の場所にある.

シェルスクリプトの中身を確認.
#!/bin/bash
# Collect any diagnostic report in a case of crash
echo
echo "Collect a diagnostic report..."
latest_diagreport=`ls -t ~/Library/Logs/DiagnosticReports/OneDrive* 2>/dev/null | head -1`
if [ "$latest_diagreport" != "" ]; then
if [[ "`grep 'OneDrive \[' \"$latest_diagreport\"`" =~ [0-9]+ ]]; then
latest_core=/cores/core."${BASH_REMATCH[0]}"
fi
fi
# Collect defaults setting information
echo "Getting current setting information of OneDrive..."
log_path=~/Library/Containers/com.micr
-以下略-

まずは,このシェルスクリプトが収集先のデータにアクセスできるよう,ファイルシステムへのアクセス権限(フルディスクアクセス)を付与する.
そしてコマンドライン上で実行してみた.
$ ./CollectLogs.command🆑
Collect a diagnostic report...
Getting current setting information of OneDrive...
Dumping File Provider state
Creating logs package...
/Users/ujpadmin/Desktop/OneDriveLogs_20251016_0347.zip created on your Desktop!
$

ZIPファイルを展開して,中身を確認.

このエラーファイルを確認.

Failed to remove quarantine bitsと記録されている.
macOSのセキュリティ機能である「クアランティン属性(quarantine bits)」がOneDriveによって解除できなかったこと
引用:
クアランティン属性とは?
macOSは、SafariやChromeなどでダウンロードされたファイルに com.apple.quarantine 属性を付けます。
この属性があると、初回実行時に「このアプリケーションはインターネットからダウンロードされました」などの警告が表示されます。
OneDriveは同期時にこの属性を解除しようとしますが、権限不足やファイルロックなどで失敗することがあります。

不要なファイルだったのでrmコマンドで削除.するとOneDriveの同期が復活しました.