LinuxでのOneDrive同期エラーと再認証の解決方法

以前、LinuxでOneDriveを利用する方法について記事を書きました。しかし、その後インストール手順に大きな変更がありましたので、最新の情報に基づいて記事を更新しました。新しい方法では、設定がより簡単になり、パフォーマンスも向上しています。

GitHub - abraunegg/onedrive: OneDrive Client for Linux
OneDrive Client for Linux. Contribute to abraunegg/onedrive development by creating an account on GitHub.

古い記事は一番下に記念として残しておきますので、興味のある方は新旧の手順を比較してみてください。変更点を知ることで、Linux上でのOneDrive利用に関する理解がさらに深まるかもしれません。

目次

Ubuntu 24.04でOneDriveを使用する手順

必要な依存関係のインストール

まず、必要なパッケージをインストールします。

sudo apt update
sudo apt install build-essential
sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl
sudo apt install libnotify-dev # 通知機能を使用する場合

D言語コンパイラのインストールとアクティブ化

OneDriveクライアントはD言語で書かれているため、DMDコンパイラをインストールします。

curl -fsS https://dlang.org/install.sh | bash -s dmd

以下のようなメッセージが表示されます。

Downloading https://dlang.org/d-keyring.gpg
######################################################################## 100.0%
Downloading https://dlang.org/install.sh
######################################################################## 100.0%
gpg: ディレクトリ’/home/mamu/.gnupg’が作成されました
gpg: keybox’/home/mamu/.gnupg/pubring.kbx’が作成されました
gpg: /home/mamu/.gnupg/trustdb.gpg: 信用データベースができました
The latest version of this script was installed as ~/dlang/install.sh.
It can be used it to install further D compilers.
Run `~/dlang/install.sh –help` for usage information.

Downloading and unpacking https://downloads.dlang.org/releases/2.x/2.109.1/dmd.2.109.1.linux.tar.xz
######################################################################## 100.0%
Using dub 1.38.1 shipped with dmd-2.109.1

Run `source ~/dlang/dmd-2.109.1/activate` in your shell to use dmd-2.109.1.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run `deactivate` later on to restore your environment.

重要なポイント

最後に表示されるメッセージに注目してください。

Run `source ~/dlang/dmd-2.109.1/activate` in your shell to use dmd-2.109.1.

これは、DMDコンパイラをアクティブにするためのコマンドです。しかし、バージョン番号(2.109.1)はインストール時期によって異なります。

DMDコンパイラのアクティブ化
  • インストールされたDMDのバージョンを確認

ターミナルで次のコマンドを入力します。

ls ~/dlang 

このコマンドで、~/dlang ディレクトリ内のファイルやフォルダが表示されます。
出力例:

d-keyring.gpg dmd-2.109.1 install.sh

dmd- から始まるフォルダがインストールされたDMDのバージョンです。

  • DMDをアクティブ化

バージョン番号を気にせずにアクティブ化するため、ワイルドカード(*)を使用します。

source ~/dlang/dmd-*/activate 

これで、~/dlang ディレクトリ内の dmd- で始まるフォルダが自動的に選択され、DMDコンパイラがアクティブになります。または、最新のバージョンをアクティブ化したい場合:

source $(ls -d ~/dlang/dmd-* | sort -V | tail -n 1)/activate


これで、DMDコンパイラがアクティブになります。

注意: この手順を実行しないと、後のコンパイルプロセスでエラーが発生します。

  • アクティブ化の確認

コマンドを実行した後、ターミナルのプロンプトが以下のように変化します。

(dmd-2.109.1) ユーザー名@コンピュータ名:~$

このように、プロンプトの先頭に (dmd-バージョン番号) が表示されていれば、DMDコンパイラが正しくアクティブ化されています。

注意事項

バージョン番号が異なる場合:DMDのバージョンは更新されるため、インストールされたバージョンに応じて数字が変わります。ワイルドカード * を使用することで、常に最新のバージョンをアクティブ化できます。

複数のDMDバージョンが存在する場合:複数のバージョンがインストールされている場合は、特定のバージョンを指定してアクティブ化することもできます。

例:

source ~/dlang/dmd-2.109.1/activate 

アクティブ化を解除する場合:DMDコンパイラの環境を元に戻すには、以下のコマンドを実行します。

deactivate 

以上の手順で、DMDコンパイラのインストールとアクティブ化が完了しました。この後、OneDriveクライアントのビルドとインストールに進むことができます。

補足

  • なぜアクティブ化が必要なのか:DMDコンパイラをアクティブにすることで、システムの環境変数が設定され、dmd コマンドが使用可能になります。この手順を省略すると、後のビルド工程でエラーが発生します。
  • エラーが出た場合:もし「コマンドが見つかりません」などのエラーが出た場合は、上記のアクティブ化コマンドが正しく実行されているか確認してください。

OneDriveクライアントのダウンロードとインストール

git clone https://github.com/abraunegg/onedrive.git
cd onedrive

ビルドとインストール

./configure
make clean; make
sudo make install

通知機能を有効にしたい場合:

./configure --enable-notifications
make clean; make
sudo make install

make clean; makeコマンド後に以下のように表示されました。

rm -f onedrive onedrive.o version
rm -rf autom4te.cache
rm -f config.log config.status
if [ -f .git/HEAD ] ; then \
git describe –tags > version ; \
else \
echo v2.5.0 > version ; \
fi
dmd -w -J. -O -L-lcurl -L-lsqlite3 -L-ldl src/main.d src/config.d src/log.d src/util.d src/qxor.d src/curlEngine.d src/onedrive.d src/webhook.d src/sync.d src/itemdb.d src/sqlite.d src/clientSideFiltering.d src/monitor.d src/arsd/cgi.d -ofonedrive

この出力は、make cleanmake コマンドの結果を示しています。

出力の解説

  1. クリーンアップ処理
    rm -f onedrive onedrive.o version
    rm -rf autom4te.cache
    rm -f config.log config.status
    • rm -f onedrive onedrive.o version: 以前のビルドで生成された実行ファイル onedrive、オブジェクトファイル onedrive.o、およびバージョン情報ファイル version を削除します。
    • rm -rf autom4te.cache: 自動生成されたキャッシュディレクトリ autom4te.cache を再帰的に削除します。
    • rm -f config.log config.status: 構成ログファイル config.log と構成ステータスファイル config.status を削除します。
  2. バージョン情報の生成
    if [ -f .git/HEAD ] ; then \
    git describe --tags > version ; \
    else \
    echo v2.5.0 > version ; \
    fi
    • Git リポジトリの最新のタグ情報を取得して、version ファイルに書き込みます。Git リポジトリが存在しない場合は、デフォルトのバージョン v2.5.0 を使用します。
  3. コンパイル

dmd -w -J. -O -L-lcurl -L-lsqlite3 -L-ldl src/main.d src/config.d src/log.d src/util.d \
src/qxor.d src/curlEngine.d src/onedrive.d src/webhook.d src/sync.d src/itemdb.d \
src/sqlite.d src/clientSideFiltering.d src/monitor.d src/arsd/cgi.d -ofonedrive

dmd: D言語のコンパイラを使用して、ソースコードをコンパイルしています。

オプションの意味:

  • -w: 警告をすべて表示します。
  • -J.: 現在のディレクトリをインポートパスに追加します。
  • -O: 最適化を有効にします。
  • -L-lcurl -L-lsqlite3 -L-ldl: リンク時に libcurllibsqlite3libdl ライブラリを使用します。
  • -ofonedrive: 出力ファイル名を onedrive に指定します。

ソースファイル: src ディレクトリ内の各 .d ファイルをコンパイル対象としています。

sudo make install コマンドを実行すると、以下のような出力が表示されました。

/usr/bin/install -c -D onedrive /usr/local/bin/onedrive
/usr/bin/install -c -D -m 0644 onedrive.1 /usr/local/share/man/man1/onedrive.1
/usr/bin/install -c -D -m 0644 contrib/logrotate/onedrive.logrotate /usr/local/etc/logrotate.d/onedrive
mkdir -p /usr/local/share/doc/onedrive
/usr/bin/install -c -D -m 0644 readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md /usr/local/share/doc/onedrive
/usr/bin/install -c -d -m 0755 /usr/lib/systemd/user /usr/lib/systemd/system
/usr/bin/install -c -m 0644 contrib/systemd/onedrive@.service /usr/lib/systemd/system
/usr/bin/install -c -m 0644 contrib/systemd/onedrive.service /usr/lib/systemd/user

この出力は、sudo make install コマンドが OneDrive クライアントをシステムにインストールする過程を示しています。

出力の解説

  1. 実行ファイルのインストール
    /usr/bin/install -c -D onedrive /usr/local/bin/onedrive
    • onedrive 実行ファイルを /usr/local/bin/onedrive にインストールしています。
  2. マニュアルページのインストール
    /usr/bin/install -c -D -m 0644 onedrive.1 /usr/local/share/man/man1/onedrive.1
    • マニュアルページ onedrive.1/usr/local/share/man/man1/ にインストールしています。
  3. ログローテーション設定のインストール
    /usr/bin/install -c -D -m 0644 contrib/logrotate/onedrive.logrotate /usr/local/etc/logrotate.d/onedrive
    • logrotate の設定ファイルを /usr/local/etc/logrotate.d/ にインストールしています。
  4. ドキュメントディレクトリの作成
    mkdir -p /usr/local/share/doc/onedrive
    • ドキュメント用のディレクトリを作成しています。
  5. ドキュメントファイルのインストール
    /usr/bin/install -c -D -m 0644 readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md /usr/local/share/doc/onedrive
    • 各種ドキュメントファイルを /usr/local/share/doc/onedrive にインストールしています。
  6. systemd サービスファイルのディレクトリ作成
    /usr/bin/install -c -d -m 0755 /usr/lib/systemd/user /usr/lib/systemd/system
    • systemd のユーザーおよびシステムユニットのディレクトリを作成しています。
  7. systemd サービスファイルのインストール
    /usr/bin/install -c -m 0644 contrib/systemd/onedrive@.service /usr/lib/systemd/system
    /usr/bin/install -c -m 0644 contrib/systemd/onedrive.service /usr/lib/systemd/user
    • onedrivesystemd サービスファイルを適切なディレクトリにインストールしています。

DMDコンパイラの非アクティブ化

ビルドが完了したら、DMDコンパイラを非アクティブ化します。

deactivate

または、ターミナルを再起動しても構いません。

OneDriveのセットアップ

onedrive

ターミナルに表示されるURLをブラウザで開き、Microsoftアカウントでログインします。ログイン後、ブラウザのアドレスバーに表示されているURLをコピーし、ターミナルに貼り付けます。

onedrive コマンドを実行すると、以下のような出力が表示されます。

Using IPv4 and IPv6 (if configured) for all network operations
Attempting to contact Microsoft OneDrive Login Service
Successfully reached Microsoft OneDrive Login Service
Configuring Global Azure AD Endpoints
Authorize this application by visiting:

Sign in to your account

注意: 上記の URL 内の client_id は一部を * でマスクしています。皆さんも記事に掲載する際は、個人情報やセキュリティに関わる情報が含まれないように注意してください。

このメッセージは、OneDrive クライアントを初めて実行した際に表示され、Microsoft アカウントへの認証が必要であることを示しています。

認証手順

  1. 表示された URL をブラウザで開く出力に表示された URL をコピーし、ウェブブラウザでアクセスします。
  2. Microsoft アカウントでログインブラウザで開いたページで、OneDrive と同期させたい Microsoft アカウントのメールアドレスとパスワードを入力してログインします。
  3. アプリへのアクセス許可を与えるアプリケーションが自分の OneDrive データにアクセスする許可を求めてきますので、「許可」または「同意」をクリックします。
  4. リダイレクトされた URL をコピー認証が完了すると、ブラウザは https://login.microsoftonline.com/common/oauth2/nativeclient?code=... のような URL にリダイレクトされます。このページは空白やエラーが表示されることがありますが、アドレスバーに表示されている URL 全体 をコピーしてください。
  5. ターミナルに貼り付けターミナルに戻り、以下のプロンプトが表示されていることを確認します。
    Enter the response uri:
    ここに先ほどコピーした URL を貼り付けて、Enter キーを押します。
  6. 認証の完了正しく認証が完了すると、以下のようなメッセージが表示されます。
    Authorization successful.
    Initialization complete.
    これで、OneDrive クライアントの設定が完了し、同期の準備が整いました。

補足:ブラウザで認証を行い、ターミナルにリダイレクトされたURLを入力すると、以下のような出力が表示されます。

Enter the response uri from your browser: https://login.microsoftonline.com/common/oauth2/nativeclient?code=**********

The application has been successfully authorised, but no extra command options have been specified.

Please use ‘onedrive –help’ for further assistance in regards to running this application.

解説

  • 認証が成功したことを示しています。
    The application has been successfully authorised
  • しかし、追加のコマンドオプションが指定されていないため、特定の操作は行われていません。
    but no extra command options have been specified.
  • onedrive --help コマンドを使用して、利用可能なオプションを確認するように促されています。
    Please use 'onedrive --help' for further assistance in regards to running this application.

構成の確認方法

OneDrive クライアントが使用している設定を確認するには、以下のコマンドを実行します。

onedrive --display-config

このコマンドは、現在の設定オプションとそのランタイムでの解釈を表示します。自分の場合、以下が出力されました。

Application version = onedrive v2.5.0-8-g88e2493
Compiled with = DMD 2109
User Application Config path = /home/mamu/.config/onedrive
System Application Config path = /etc/onedrive
Applicable Application ‘config’ location = /home/mamu/.config/onedrive/config
Configuration file found in config location = false – using application defaults
Applicable ‘sync_list’ location = /home/mamu/.config/onedrive/sync_list
Applicable ‘items.sqlite3’ location = /home/mamu/.config/onedrive/items.sqlite3
Config option ‘drive_id’ =
Config option ‘sync_dir’ = ~/OneDrive
Config option ‘enable_logging’ = false
Config option ‘log_dir’ = /var/log/onedrive
Config option ‘disable_notifications’ = false
Config option ‘skip_dir’ =
Config option ‘skip_dir_strict_match’ = false
Config option ‘skip_file’ = ~*|.~*|*.tmp|*.swp|*.partial
Config option ‘skip_dotfiles’ = false
Config option ‘skip_symlinks’ = false
Config option ‘monitor_interval’ = 300
Config option ‘monitor_log_frequency’ = 12
Config option ‘monitor_fullscan_frequency’ = 12
Config option ‘read_only_auth_scope’ = false
Config option ‘dry_run’ = false
Config option ‘upload_only’ = false
Config option ‘download_only’ = false
Config option ‘local_first’ = false
Config option ‘check_nosync’ = false
Config option ‘check_nomount’ = false
Config option ‘resync’ = false
Config option ‘resync_auth’ = false
Config option ‘cleanup_local_files’ = false
Config option ‘classify_as_big_delete’ = 1000
Config option ‘disable_upload_validation’ = false
Config option ‘disable_download_validation’ = false
Config option ‘bypass_data_preservation’ = false
Config option ‘no_remote_delete’ = false
Config option ‘remove_source_files’ = false
Config option ‘sync_dir_permissions’ = 700
Config option ‘sync_file_permissions’ = 600
Config option ‘space_reservation’ = 52428800
Config option ‘application_id’ = d50ca740-c83f-4d1b-b616-12c519384f0c
Config option ‘azure_ad_endpoint’ =
Config option ‘azure_tenant_id’ =
Config option ‘user_agent’ = ISV|abraunegg|OneDrive Client for Linux/v2.5.0-8-g88e2493
Config option ‘force_http_11’ = false
Config option ‘debug_https’ = false
Config option ‘rate_limit’ = 0
Config option ‘operation_timeout’ = 3600
Config option ‘dns_timeout’ = 60
Config option ‘connect_timeout’ = 10
Config option ‘data_timeout’ = 60
Config option ‘ip_protocol_version’ = 0
Config option ‘threads’ = 8
Compile time option –enable-notifications = false

Selective sync ‘sync_list’ configured = false

Config option ‘sync_business_shared_items’ = false

Config option ‘webhook_enabled’ = false

ポイント

  • sync_dir: ローカルで同期されるディレクトリの場所です。デフォルトでは ~/OneDrive になっています。
  • Config path: 設定ファイルが保存されている場所です。

注意

  • 複数の OneDrive アカウントを使用している場合は、--confdir オプションを使用して、特定の設定ディレクトリを指定する必要があります。

OneDrive クライアントの動作モード

OneDrive クライアントには、次の2つの動作モードがあります。

  1. スタンドアロン同期モード(単発の同期)単一の同期アクションを実行します。
    onedrive --synchronize
    または短縮形:
    onedrive -s
  2. 継続同期モード(リアルタイム同期)データを継続的に同期します。
    onedrive --monitor
    または短縮形:
    onedrive -m

ヒント

  • スタンドアロン同期モードは、一度だけ同期を行いたい場合に使用します。
  • 継続同期モードは、ファイルの変更をリアルタイムで同期したい場合に使用します。

クライアント側フィルタリングの設定

デフォルトでは、OneDrive アカウント内のすべてのデータがローカルに同期されます。しかし、特定のフォルダやファイルのみを同期したい場合は、フィルタリングの設定が必要です。

方法1: sync_list ファイルを使用

  1. 設定ディレクトリに移動します。
    cd ~/.config/onedrive
  2. sync_list ファイルを作成し、同期したいフォルダやファイルのパスを記述します。
    nano sync_list
    例として、DocumentsPictures/Vacation フォルダのみを同期する場合:
    Documents
    Pictures/Vacation
  3. ファイルを保存して終了します。

方法2: オプションを使用

  • 特定のディレクトリを同期から除外する
    onedrive --synchronize --exclude-dir 'ディレクトリ名'
  • ドットファイルを同期から除外する
    onedrive --synchronize --skip-dotfiles
  • 特定のファイルタイプを除外する
    onedrive --synchronize --skip-file 'パターン'
    例: .tmp ファイルを除外する場合
    onedrive --synchronize --skip-file '*.tmp'

トラブルシューティング

モニター モードでの一般的なエラー

1. 初期化失敗

  • 原因: システムの inotify ウォッチ数の上限に達しています。
  • 対策: fs.inotify.max_user_watches の値を増やします。現在の値を確認:
    sysctl fs.inotify.max_user_watches
    値を増やす:
    sudo sysctl fs.inotify.max_user_watches=1048576

2. 新しい inotify ウォッチを追加できません

  • 原因と対策: 上記と同様です。

永続的に設定を変更する

/etc/sysctl.conf
ファイルに以下の行を追加します。

fs.inotify.max_user_watches=1048576

特に、ファイルの保存場所や同期設定を理解することは重要です。

設定のテスト

OneDrive クライアントの設定をテストする際には、--dry-run オプションを使用すると安全です。このオプションを使うと、実際のファイルのダウンロード、アップロード、削除は行われず、どのような操作が行われるかをシミュレーションできます。

例:

onedrive --synchronize --verbose --dry-run

ポイント:

  • --dry-run オプションを使用することで、実際のファイル操作を行わずに動作を確認できます。
  • --verbose オプションを併用すると、詳細なログ情報が表示されます。

Microsoft OneDriveとの同期を実行する

デフォルトでは、すべてのファイルは ~/OneDrive ディレクトリにダウンロードされます。このダウンロード場所は、設定ファイルの sync_dir オプションで変更できます。

基本的な同期コマンド:

onedrive --synchronize

または短縮形:

onedrive -s

これにより、OneDrive アカウントのファイルがローカルの ~/OneDrive ディレクトリ、または指定した sync_dir の場所に同期されます。

ヒント:

ローカルファイルを「信頼できるソース」として扱いたい場合は、以下のコマンドを使用します。

onedrive --synchronize --local-first

特定のディレクトリのみを同期する

場合によっては、設定を変更せずに ~/OneDrive 内の特定のディレクトリのみを同期したいことがあります。その場合は、--single-directory オプションを使用します。

例:

onedrive --synchronize --single-directory 'ディレクトリ名'

具体例:

~/OneDrive/linux ディレクトリのみを同期する場合:

onedrive --synchronize --single-directory 'linux'

「一方向」ダウンロード同期を実行する

OneDrive からローカルへ「ダウンロードのみ」を行いたい場合は、--download-only オプションを使用します。

コマンド:

onedrive --synchronize --download-only

注意点:

  • OneDrive からすべてのコンテンツがローカルにダウンロードされます。
  • オンラインで削除されたファイルはローカルに残ります。自動的には削除されません。

重要:

  • バージョン v2.5.x 以降では、--download-only オプションを使用した際、オンラインで削除されたファイルはローカルに残ります。
  • オンラインで削除されたファイルをローカルでも削除したい場合は、以下のコマンドを使用します。

オンラインで削除されたファイルをクリーンアップする:

onedrive --synchronize --download-only --cleanup-local-files

「一方向」アップロード同期を実行する

ローカルから OneDrive へ「アップロードのみ」を行いたい場合は、--upload-only オプションを使用します。

コマンド:

onedrive --synchronize --upload-only

重要な注意点:

  • 「アップロードのみ」モードでは、OneDrive 上の既存のコンテンツは確認・同期されません。
  • ローカルで削除されたファイルやフォルダは、OneDrive からも削除されます。

OneDrive 上のデータを削除したくない場合:

ローカルで削除したファイルが OneDrive から削除されないようにするには、--no-remote-delete オプションを追加します。

コマンド:

onedrive --synchronize --upload-only --no-remote-delete

ポイント:

  • --upload-only:ローカルの変更(追加、変更、移動、削除)を OneDrive にアップロードします。
  • --no-remote-delete:ローカルで削除されたファイルでも、OneDrive 上では削除されません。これにより、OneDrive 上に一方向のアーカイブが作成され、ファイルは追加されるだけで削除されることはありません。

初心者への注意点

  • 重要なオプションを使用する際は、必ず事前に --dry-run オプションでテストしてください。
  • 誤ったオプションの使用により、データが意図せず削除される可能性があります。
  • 設定ファイルやコマンドのオプションをしっかりと理解した上で操作を行ってください。

選択的同期の実行:sync_list ファイルの使用

OneDrive クライアントでは、sync_list ファイルを使用して、特定のファイルやディレクトリのみを同期する「選択的同期」が可能です。これにより、必要なデータだけを同期し、不要なデータの同期を防ぐことができます。

sync_list ファイルの作成

  1. 設定ディレクトリに移動
    cd ~/.config/onedrive
  2. sync_list ファイルを作成
    nano sync_list
  3. 同期したいファイルやディレクトリを記述各行に sync_dir(デフォルトでは ~/OneDrive)からの相対パスを記述します。例:
    # コメント:Documents フォルダを同期
    Documents/
    # コメント:Pictures/Vacation フォルダを同期
    Pictures/Vacation/
    # コメント:特定のファイルを同期
    Notes/meeting_minutes.docx
  4. ファイルを保存して終了
    Ctrl + O で保存し、Ctrl + X でエディタを終了します。

sync_list の注意点

  • 除外のデフォルト設定
    • sync_list を使用すると、記載されていないファイルやディレクトリは すべて同期から除外 されます。
  • パスの指定
    • パスは sync_dir からの相対パスで記述します。
    • フォルダ名の末尾に / を付けてディレクトリであることを明示します。
  • ワイルドカードの使用
    • * を使用して任意の文字列にマッチさせることができます。
      例:
      # 拡張子が `.pdf` のファイルをすべて同期
      Documents/*.pdf
  • 除外の指定
    • 行の先頭に ! または - を付けると、そのパターンにマッチする項目を 除外 できます。
      例:
      # Temp フォルダを除外
      !Documents/Temp/

sync_list を使用した後の注意

sync_list を作成・変更した場合、以下のコマンドで完全な再同期を行う必要があります。

onedrive --synchronize --resync

警告:

  • --resync オプションを使用すると、ローカルの同期状態がリセットされます。場合によっては ローカルデータが上書き される可能性があります。
  • 必ず事前にローカルデータのバックアップを取ってください。

--resync オプションの使用

--resync オプションは、同期状態を再構築するために使用します。以下の場合に必要となります。

  • 設定の変更
    • sync_dirskip_fileskip_dirskip_dotfiles などの設定を変更した場合。
  • sync_list ファイルの作成・変更・削除
  • 同期状態が不明確な場合

--resync の実行方法

onedrive --synchronize --resync

実行時の警告:

Using --resync will delete your local 'onedrive' client state, so there won't be a record of your current 'sync status.'
This may potentially overwrite local versions of files with older versions downloaded from OneDrive, leading to local data loss.
If in doubt, back up your local data before using --resync.

Are you sure you want to proceed with --resync? [Y/N]
  • 続行する場合は Y を入力 します。

注意:

  • --resync は慎重に使用してください。
  • 自動化された環境で使用する際は、--resync-auth オプションを追加すると確認プロンプトを自動的に承認しますが、データ損失のリスクが高まるため推奨されません。

--force-sync オプションの使用

特定のファイルやディレクトリのみを一時的に同期したい場合、--force-sync オプションを使用すると、設定を変更せずに skip_fileskip_dir の設定を無視して同期を行えます。

使用方法

onedrive --synchronize --single-directory 'ディレクトリ名' --force-sync

例:

onedrive --synchronize --single-directory 'Projects/Important' --force-sync

実行時の警告:

WARNING: Overriding application configuration to use application defaults for skip_dir and skip_file due to --sync --single-directory --force-sync being used

Using --force-sync will reconfigure the application to use defaults. This may have unknown future impacts.
By proceeding with this option, you accept any impacts, including potential data loss resulting from using --force-sync.

Are you sure you want to proceed with --force-sync? [Y/N]
  • 続行する場合は Y を入力 します。

注意:

  • --force-sync を使用すると、一部の設定が無視されるため、予期しない動作やデータ損失のリスクがあります。
  • 必要な場合のみ、慎重に使用してください。

重要なポイントのまとめ

  • sync_list の使用
    • 必要なファイル・フォルダのみを同期するために有効。
    • 作成・変更後は必ず --resync を実行。
  • --resync の使用
    • 同期状態をリセットし、再構築するために使用。
    • データ損失のリスクがあるため、バックアップを取って慎重に使用。
  • --force-sync の使用
    • 一時的に設定を無視して特定の同期を行う。
    • 予期しない動作のリスクがあるため、必要な場合のみ使用。

初心者へのアドバイス

  • バックアップの重要性
    • 重大な変更やオプションを使用する前に、必ずデータのバックアップを取ってください。
  • --dry-run オプションの活用
    • 実際の操作を行わずに動作を確認できます。
    • コマンド例:
      onedrive --synchronize --dry-run --verbose
  • 公式ドキュメントの参照
    • 不明な点や詳細な情報は、公式ドキュメントやヘルプコマンドを参照してください。
      onedrive --help

Microsoft OneDrive アカウントのパスワード変更時の対処方法

パスワード変更による同期エラーの発生

Microsoft OneDrive アカウントのパスワードを変更すると、OneDrive クライアントは認証情報が無効となり、同期ができなくなります。次回クライアントを実行すると、以下のようなエラーメッセージが表示されます。

ERROR: AADSTS50173: The provided grant has expired due to it being revoked, a fresh auth token is needed. The user might have changed or reset their password. The grant was issued on '<date-and-timestamp>' and the TokensValidFrom date (before which tokens are not valid) for this user is '<date-and-timestamp>'.

ERROR: You will need to issue a --reauth and re-authorise this client to obtain a fresh auth token.

解説:

  • AADSTS50173 エラーコードは、認証トークンが無効化されたことを示しています。
  • 原因は、パスワードの変更やリセットによって、既存の認証情報が無効になったためです。

再認証の手順

パスワード変更後にクライアントを再認証するには、以下の手順を行います。

  1. OneDrive クライアントを停止
    • システムサービスとして実行している場合:
      systemctl --user stop onedrive
      または
      systemctl stop onedrive
      (使用しているサービスに応じて適切なコマンドを使用してください。)
    • 手動で実行している場合:
      • クライアントを終了します。
  2. 再認証コマンドを実行
    ターミナルで以下のコマンドを実行します。
    onedrive --reauth
    注意:
    • 複数のアカウントや特定の設定ディレクトリを使用している場合は、--confdir オプションを追加してください。
      onedrive --confdir="~/.config/onedrive-personal" --reauth
  3. ブラウザで再認証
    • コマンドを実行すると、ターミナルに認証用のURLが表示されます。
    • そのURLをブラウザで開き、Microsoft アカウントにログインします。
    • アプリへのアクセス許可を与えます。
    • リダイレクトされたURLをコピーし、ターミナルに貼り付けます。
  4. クライアントを再起動
    • システムサービスとして実行している場合:
      systemctl --user start onedrive
      または
      systemctl start onedrive
    • 手動で実行する場合:
      onedrive --synchronize
  5. 同期の確認
    • クライアントが正常に同期を再開することを確認します。

同期結果の判定とエラーの対処

同期の成功時

同期がエラーなく完了すると、以下のメッセージが表示されます。

Sync with OneDrive is complete

同期エラーの発生時

同期中にエラーが発生した場合、次のようなメッセージが表示されます。

Sync with OneDrive has completed, however there were some errors.

エラーの詳細が表示されるので、原因を特定できます。

エラー発生時の対処方法

  1. ログを確認
    • クライアントの出力やログファイルを確認し、どのファイルやディレクトリでエラーが発生したかを特定します。
  2. 一般的な原因と対策
    • ネットワークエラー:
      • インターネット接続を確認し、再度同期を試みます。
    • ファイル名の問題:
      • 特殊文字や長いファイル名が原因の場合、ファイル名を変更します。
    • アクセス権限の問題:
      • 該当するファイルやディレクトリのアクセス権限を確認・修正します。
  3. 再同期を試みる
    onedrive --synchronize
  4. 必要に応じて再認証や再同期を行う
    • 認証エラーの場合: 上記の再認証手順を実行します。
    • 同期状態のリセットが必要な場合:
      onedrive --synchronize --resync
      注意:
      • --resync を使用すると、ローカルの同期データベースがリセットされます。事前にバックアップを取ってください。

パスワード有効期限と定期的な確認

企業や組織のポリシーでパスワードの有効期限が設定されている場合、定期的にパスワードの変更が必要です。その際、同期エラーが発生する可能性があるため、以下の点に注意してください。

  • 定期的なパスワード変更後は、クライアントの再認証が必要です。
  • エラーが発生したら、すぐに再認証手順を行い、同期を再開してください。

Linux版のOneDriveクライアントとRcloneの比較

Linux版OneDriveクライアント

概要:

  • 公式名称: onedrive (または onedrive-d)
  • 開発者: 有志によるオープンソースプロジェクト
  • 主な機能:
    • Microsoft OneDriveとの双方向同期
    • シンボリックリンクのサポート
    • ファイル変更のリアルタイム監視(モニター モード)
    • 選択的同期やフィルタリング設定が可能

メリット:

  • ネイティブなOneDriveサポート:
    • Microsoft OneDrive専用に設計されており、OneDriveの機能を最大限に活用できます。
  • リアルタイム同期:
    • ファイルの変更を即座に検知し、自動的に同期します。
  • 詳細な設定:
    • sync_list ファイルや各種オプションで、同期対象を細かく指定できます。

デメリット:

  • 限定されたクラウドサービス:
    • OneDrive専用のため、他のクラウドストレージサービスとの同期はサポートしていません。
  • 設定の複雑さ:
    • 高度な設定が可能な反面、初心者にはやや難しい部分もあります。
  • メンテナンスの頻度:
    • オープンソースプロジェクトであり、開発状況によっては更新が不定期になる可能性があります。

Rclone

概要:

  • 開発者: Nick Craig-Wood氏によるオープンソースプロジェクト
  • 主な機能:
    • 多数のクラウドストレージサービスとの連携(OneDrive、Google Drive、Dropboxなど30以上)
    • コマンドラインベースのファイル転送・同期ツール
    • 暗号化、キャッシュ、仮想ファイルシステム(VFS)などの高度な機能

メリット:

  • マルチクラウド対応:
    • 一つのツールで複数のクラウドサービスを統合的に管理できます。
  • 豊富な機能:
    • 同期、コピー、移動、削除、マウントなど多彩な操作が可能です。
  • スクリプトとの連携:
    • コマンドラインツールであるため、スクリプトや自動化と相性が良いです。

デメリット:

  • リアルタイム同期の難しさ:
    • リアルタイムの双方向同期を行うためには、Cronや他のツールと組み合わせる必要があります。
  • 設定の複雑さ:
    • 多機能であるがゆえに、初期設定や使いこなすためには習熟が必要です。
  • インクリメンタルな変更検知の制限:
    • 一部のクラウドサービスでは、変更の検知に制限があり、効率的な同期が難しい場合があります。

比較と考察

使用目的による選択:

  • OneDriveのみを使用し、リアルタイム同期を重視する場合:
    • Linux版OneDriveクライアントが適しています。OneDrive専用に最適化されており、モニター モードでリアルタイム同期が可能です。
  • 複数のクラウドサービスを統合的に管理したい場合:
    • Rcloneが有力な選択肢です。一つのツールで複数のサービスを扱えるため、管理が簡素化されます。

設定と操作性:

  • シンプルな設定を求める場合:
    • Linux版OneDriveクライアントは、OneDrive専用であるため、設定項目が限定されており、目的に特化しています。
  • 柔軟性と高度な機能を求める場合:
    • Rcloneは、多彩な機能とオプションを持っており、要件に合わせて細かな設定が可能です。

パフォーマンスと信頼性:

  • リアルタイムの高パフォーマンスな同期:
    • Linux版OneDriveクライアントは、OneDriveとの同期に最適化されており、効率的に動作します。
  • 大量のデータや複雑な同期要件:
    • Rcloneは、並列転送や帯域幅制限、暗号化などの高度な機能を備えており、大規模なデータの扱いに適しています。

結論

  • Linux版OneDriveクライアントは、OneDriveをLinux環境で利用するユーザーにとって、シンプルかつ効果的なツールです。リアルタイム同期や選択的同期など、OneDrive専用の機能を活用できます。
  • Rcloneは、複数のクラウドサービスを一元管理したい、または高度な機能を必要とするユーザーに適しています。カスタマイズ性が高く、多様なニーズに対応できます。

私の意見としては、

  • OneDriveのみをLinuxで利用し、リアルタイム同期や専用機能を重視する場合は、Linux版OneDriveクライアントを選ぶと良いでしょう。
  • 複数のクラウドサービスを統合管理したい場合や、スクリプトでの自動化、高度な設定を活用したい場合は、Rcloneが適しています。

Ubuntu20.04でOneDriveを使用できるようにします。GitHubのページでコマンドをコピペするだけです。そのためには最初に依存関係をインストールします。

GitHub - abraunegg/onedrive: OneDrive Client for Linux
OneDrive Client for Linux. Contribute to abraunegg/onedrive development by creating an account on GitHub.
sudo apt install build-essential
sudo apt install libcurl4-openssl-dev
sudo apt install libsqlite3-dev
sudo apt install pkg-config
sudo apt install git
sudo apt install curl
curl -fsS https://dlang.org/install.sh | bash -s dmd

mamushi@mamushipc:~$ curl -fsS https://dlang.org/install.sh | bash -s dmd
Downloading https://dlang.org/d-keyring.gpg

################################################################## 100.0%

Downloading https://dlang.org/install.sh

################################################################## 100.0%

The latest version of this script was installed as ~/dlang/install.sh.
It can be used it to install further D compilers.
Run ~/dlang/install.sh --help for usage information.

Downloading and unpacking http://downloads.dlang.org/releases/2.x/2.098.1/dmd.2.098.1.linux.tar.xz

################################################################## 100.0%

Using dub 1.27.0 shipped with dmd-2.098.1

Run source ~/dlang/dmd-2.098.1/activate in your shell to use dmd-2.098.1.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run deactivate later on to restore your environment.

Curlコマンドを使用した時に表示された内容をメモしておきます。この場合は下記をターミナルにコピペします。D言語をアクティブにするということらしいです。なお、これを行うとターミナルでユーザー名の前にdmdが付きます。

source ~/dlang/dmd-2.098.1/activate

次はGITからファイルをとってきて設定およびインストールをします。

git clone https://github.com/abraunegg/onedrive.git
cd onedrive
./configure
make clean; make;
sudo make install

ここまで終わったら、先ほどのD言語を非アクティブにするか、一度ターミナルを起動しなおします。
onedriveと入力するとURLが表示されるので、レスポンスURLを入力するように求められます。そこで、ブラウザで表示されたこのURLにアクセスします。


OneDriveのユーザー名とパスワードを入力して進むと空白のページが表示されます。この空白のページのURLがレスポンスURLですので、これをターミナルに貼り付けて完了です。

それではLinux版のOneDriveで同期をしてみましょう。構成内容を確認します。

onedrive --display-config

全て同期するコマンドを入力しますが、後ろにdry-runを付けると検証するとこができます。ファイルのダウンロード、アップロード、削除が表示されますがテストなので実際には行われていません。

onedrive --synchronize --verbose --dry-run

全部同期する必要はなかったので一部だけを同期することにしました。OneDriveの下の単一フォルダを同期しました。

onedrive --synchronize --single-directory '<dir_name>'

mamushi@mamushipc:~$ onedrive –synchronize –single-directory ‘linux’
Configuring Global Azure AD Endpoints
Initializing the Synchronization Engine …
WARNING: The requested path for –single-directory does not exist locally. Creating requested path within /home/mamushi/OneDrive
Syncing changes from selected OneDrive path …
Downloading file linux/test.ods … done.
Downloading file linux/kehai.xlsx … done.
Uploading differences of linux
Uploading new items of linux

他にも一方向の同期もあるみたいです。

タイトルとURLをコピーしました