Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

syncコマンドのデータ同期 完了待ちやエラー検出

syncコマンドのデータ同期 完了待ちやエラー検出

以下動画のテキストです。
https://youtu.be/ZNNCU4RHF6g

Satoru Takeuchi

August 24, 2024
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. はじめに • syncコマンドはページキャッシュをディスクに同期する ◦ 📝: 過去動画「その20 ページキャッシュの概念 」 • Linuxについて、以下2つの疑問に回答

    ◦ 「syncはデータ同期処理を開始するだけで完了を待たずに終了する」「 syncは3回」などと聞いたこ とがあるが、実際のところはどうなのか ◦ 同期中のディスクI/Oでエラーが起きたら検出できるのか • syncコマンドはcoreutilsパッケージが提供するものとする 2
  2. syncはデータ同期の完了を待つか • syncコマンドの仕様 ◦ man 1 syncより抜粋 ◦ Persistence guarantees

    vary per system. See the system calls below for more details. • syncコマンドの中で呼び出すsync()関数の仕様 ◦ POSIX: 同期の完了を保証しない ▪ man 3p syncより抜粋: ▪ The writing, although scheduled, is not necessarily complete upon return from sync(). ◦ Linux: 同期の完了を保証しない ▪ man 2 syncより抜粋: ▪ may return before the actual writing is done. • ただし、実装上はsync()終了前に同期が完了している ◦ man 2 syncより抜粋: ◦ However Linux waits for I/O completions, 4
  3. syncはエラー検出できるか • デフォルトではエラー検出できない ◦ そもそもsync()関数に戻り値が無い ◦ 実装上も、同期処理の成否にかかわらず、終了したら復帰するだけ • `-f`オプションを付ければエラー検出可能 ◦

    sync -f <あるファイルシステム上に存在するファイル >を実行すると、当該ファイルシステム上の データを全て同期して、成功なら 0を、失敗なら0以外を返す ◦ 内部的にはsync()の代わりに上記のことをする syncfs()システムコールを呼び出している • 興味のある人はソースを参照 ◦ https://github.com/coreutils/coreutils/blob/master/src/sync.c 5