ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Appleファイルシステムの新機能
このセッションでは、ファイルシステムのレイアウトおよびイメージングに関するテクノロジーの変更点など、ファイルシステムテクノロジーの新機能について紹介します。新しい読み取り専用システムボリュームの影響を受ける場合は、このセッションをぜひご確認ください。
リソース
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
(拍手) みなさん ようこそ このセッションでは ファイルシステムに関連する トピックを取り上げます まず macOSの ソフトウェア保護における ファイルシステムの役割を お話しします
次に APFSでの ボリューム複製について説明します そして最後に iOSとiPad OSに備わった エキサイティングな 新機能を紹介します それは外部メディアの ファイルへのアクセスです
本題に入る前に― 最近のAPFSについて 振り返ってみましょう APFSはデフォルトの ファイルシステムです iOSとtvOSでは10.3以降 macOSではHigh Sierra以降です
APFSに導入された機能の1つが ビルトインのボリュームマネージャです
ボリュームの概念自体は 新しくありません HFS Plusにもありました HFS Plusボリュームは パーティションと1対1で マッピングされ ディスク上のブロックの 連続した範囲を占めます この1対1マッピングのため HFS Plusボリュームは 簡単に追加ができません 新しいボリュームを ディスクに追加するには 既存のボリュームの圧縮が必要です そのあとで追加ができます APFSボリュームは より柔軟です 独自のディスクパーティション スペースを共有するためです
また その柔軟性によって より高レベルのシステムに 旧タイプのボリュームでは不可能な 機能を実装できます
その1つが 悪意のある または偶発的な更新から システムソフトウェアを 保護する機能です
OS X El Capitan時代の システム整合性保護を思い出すでしょう
それはディレクトリ階層の 一部へのアクセスを 制御するものでした 一部のディレクトリは 書き込み保護され ファイルシステムの他の部分は 変更が許可されました 今年はさらに一歩踏み込み ルートファイルシステム全体が 読み取り専用です (歓声と拍手)
もちろん 新しいソフトのインストールや データ保存ができないシステムは 使えません
読み取り専用と書き込み可能の 両立を成し遂げた― MojaveとCatalina間の アップグレードの詳細を見てみましょう
macOS Mojaveの一般的なコンテナには 1つのメインボリュームと いくつかの サービスボリュームがあります
メインボリュームにはユーザデータと システムソフトウェアがあります
アップグレードの際…
macOS Catalinaへの アップグレードを開始すると
メインボリュームの役割を変更し データボリュームとします
そしてディレクティブ階層の システムソフトウェアのみを プルーニングします
完了したら―
次は システムソフトウェアの 格納に使用する― 新しいボリュームを作成します
そこにシステムコンテンツを入れます ここまで完了すれば 読み取り専用で 保護は完璧です
しかしまだ不十分です
新しいシステムコンテンツと ユーザコンテンツを 繋ぐ必要があります そこでボリュームグループの概念を 導入します 1つのデータボリュームと 1つのシステムボリュームを 単一エンティティとして扱います
UIは単一のディスクで表示され 暗号化状態を共有します 暗号化されている時は 同じパスワードで両方を ロック解除できます ほとんど単一エンティティのように 見えますが―
足りない点があります 単一のディレクトリ階層に 見せる必要があります 従来はルートファイルシステムの ディレクトリのトップに ファイルシステムをマウントしました
導入すべき多数のクロッシングポイントと ファイルシステムのボリューム数により かなり負担になります そこで Firmlinkという 新コンセプトを導入しました
Firmlinkは新たな ファイルシステムのオブジェクトです Symlinkに似てますが Firmlinkでは異なる点があります
バックワードトラバーサルと フォワードトラバーサルに対応し
その表現に一貫性があります この一貫性はかなり重要です たとえばアプリケーションの場合は 必ず特定のディレクトリに 入れなければなりません するとファイルシステムの ルートからリーフまで 双方向へのアクセスが必要です
Firmlinkが可能にします
Firmlinkは―
システムボリュームから データボリュームへの トラバーサルポイントです
1ソースと1ターゲットの 1対1マッピングです ボリュームグループの境界は 越えられません
Firmlinkはユーザにとって透過的です インストール時に作成され ユーザには見えません
この新しいツールで ボリュームを繋ぐことができます インストーラはシステムボリュームに エントリを作成します
そしてデータボリューム上の 対応するボリュームを指します
すると統一された ディレクトリ階層ができます 再起動し 読み取り専用で ルートをマウントすれば保護は万全です
これですべて― 保護された状態で実行できます でも忘れないでください インストールで ボリュームは分割されます 避ける方法はありません
プレビュー版では ルートファイルシステムは 書き込み可能なままです アプリケーションのテストを 容易にするためです これから実装する動作を模倣する場合は ルートディレクトリに 特別なファイルを作成し 再起動で ボリュームを 読み取り専用にします それは次のシード版の ビルドで変更されます
リリースビルドでは システム整合性保護をオフにして ルートファイルシステムを 読み取り/書き込みでマウントできます
しかし永続的ではなく 再起動で 読み取り専用に戻ります
読み取り/書き込みで再マウントしても 再起動すると元に戻ります
macOSとそのインストールにおいて かなり大きな変更です 問題が出るアプリケーションも あるでしょう たとえばファイルシステム上の レイアウトが複雑だとか インストーラパッケージが 付属する場合です 読み取り専用ルートパーティションで 動作確認が必要です
inode番号や ファイルシステムIDを使う― バックアップユーティリティを 作る場合は 以前に問題がなくても 必ずテストをしてください つまりテストが一番重要です 次は ジョンが ボリューム複製を解説します
(拍手)
ありがとう マックス
こんにちは APFSのボリューム複製について お話しします 最初に― ボリューム複製とは? 基本的には あるボリュームを 別のボリュームにコピーすることです シンプルですね
そこで重要なのは コピーの忠実度を高めることです 通常はファイルごとのコピーではなく ボリュームコンテンツ全体を コピーします すべてのデータ メタデータ ボリューム属性です ソースにブート可能なOSがあれば メタデータをコピーし ターゲットもブート可能にします ここで話題を― Apple Software Restore コマンドラインユーティリティに移します ASRは以前からあるので ご存じですね その主な機能はボリューム複製です 通常 ASRでの複製では ソースはディスクイメージです ですからターゲットボリュームへの 複製の手順は ASRの名前のとおり 復元と呼ばれます “復元”と“複製”は 同じことを指しています
では―
この機能は どういう場面で必要でしょうか たとえば教育機関や大手IT企業 大量のマシンがある 大規模なラボでのセットアップ バックアップユーティリティの 作成などです そこでは定期的に 複製が必要になります APFSの新機能の一部は 複製の際に課題となります しかし その一方で この新機能は複製を 強力で柔軟にしています
ここで少し振り返って APFS以前の複製を見てみましょう マックスが見せたHFS Plusなどの ファイルシステムは―
ボリュームとパーティションが 1対1の関係にあります つまりボリュームは 連続したブロックデバイスです したがって複製は パーティション全体を ブロックコピーするだけでした
ブロックデバイス全体のコピーでは ボリューム内の全情報をコピーします 問題が発生するのは ソースとターゲットの サイズが異なる場合です しかし修正方法があるので ブロックコピーは効率的で 簡単な複製方法です
しかしAPFSには これを複雑にする新機能があります
ボリューム管理や スペース共有などです
この図で ボリューム1は コンテナパーティション中に 散在します 連続したブロックではありません また ボリューム2という 別のボリュームが 同じコンテナに混在します
さらに セキュリティのため必要な 暗号化は― APFSではファイルシステムレベルで 行われます Apple T2セキュリティチップ搭載の Macでは 内部ストレージの暗号化は常にオンです 鍵はハードウェアに紐付けられ そのMacのストレージデバイス 専用になります そのボリュームのブロックコピーは 他では復号化できません つまり APFSボリュームでは ブロックコピーが使えないのです
そこでニーズにどう対応したのか?
macOS Catalinaは ASRでAPFSボリュームの 複製をします ASRとAPFSは― 緊密に統合されています ASRは APFSにソースから ストリームを生成させ ターゲットに書き込みます
APFSはソースボリューム上の 読み取るべき場所を知っています
連続ブロックでなくても構いません
ソースが暗号化されている場合は ストリーム生成で そのソースからの データが復号化されます FileVaultで保護された ソースの場合は複製の前に― ユーザがロック解除します ターゲットボリュームが 暗号化されている場合 書き込み時にデータを 暗号化します つまりストリームからターゲットに 移す前に暗号化されます
もう1つの優れた機能は ストリーム生成でボリュームデータが デフラグされることです メタデータは圧縮され ストリームはうまく最適化されます これは たとえば― 画像のマスタリングに最適です マスタリングの最後で複製を行うと 画像ボリュームが最適化されます
復元を実行する時―
いろいろなオプションがあります そのいくつかを紹介します 最初の1つは 従来の復元と似ています ソースボリュームと ターゲットボリュームが指定されます ターゲットボリュームは完全に消去され ソースボリュームの内容に 置き換えられます この例では ボリューム2が ターゲットボリュームです コマンドラインが下にあります ボリューム2の内容が消去され ソースの内容になります 復元先とソースは同じです ターゲットコンテナには 別のボリュームもあります そのボリュームは保持され 複製操作には関係がありません また別のオプションでは ターゲットボリュームを指定して 消去する代わりに ターゲットとなる 新しいボリュームを生成します それにはコンテナ全体を ターゲットに指定し ASRに新しいボリュームを作らせ そこに復元します サンプルのコマンドラインが 下にあります ボリューム1と2に変更はありません
では 複製から少し離れ― APFSのスナップショットについて 話します スナップショットはボリュームの ある時点の状態です 複数のファイルを含むボリュームの スナップショットを撮ってみます
そうすると その時点のフリーズフレームが 作成されます ファイルの削除や追加など ボリュームに変更を加えても スナップショットには 作成時の状態が保存されます ライブボリュームでは 削除したファイルは見えませんが スナップショットの一部として 残されています それと複製との関係は? 新しいmacOS Catalinaでは スナップショットの複製ができます
その意味を… (拍手) ありがとう 左のボリュームで考察してみます スナップショット1と2があります 黄色が共通ファイルで あとは一方だけにあるファイルや どちらにも属さないファイルがあります
これを右のターゲットボリュームに 復元します 今は空です 復元後はターゲットボリュームが ソースボリュームのように見えます そこで 今見えている ソースボリュームでなく スナップショットを復元できます たとえばスナップ1を 復元する スナップショットに指定します その結果ターゲットは スナップ1のように見えます 注目すべきは― 削除された2つのファイルが 復活していることです
次にターゲットに ファイルを追加したあとで スナップ2をターゲットに 復元したいとします
結果 ターゲットボリュームは スナップ2のように見えます その時 ソースとターゲットに すでにスナップ1があります スナップ2のすべてをコピーするより 1と2の違いだけをコピーしたいですね それが可能で その違いを スナップショットデルタと呼びます スナップショットデルタの復元は 2つのスナップショットの違いを 指定して復元します ターゲットボリュームは ソースのスナップ2に見えます ここで注目点が3つあります 1つ目は 両スナップショットにない ファイルは消去されたこと 2つ目は スナップ1にあって スナップ2にないファイルは 消去されたこと ただしスナップショット1には 存在します 3つ目は スナップ1にない― スナップ2のファイルだけを コピーしたということ
インクリメンタルリリースにおいて 強力な機能です 100台のマシンを更新する時 ソース上の差異だけをコピーできれば 時間とネットワーク帯域幅を 節約できます
では複製について まとめましょう
新システムの高度な複製メカニズムです
APFSボリューム複製はASRを利用し 高い忠実度でコピーでき 暗号化にも対応します そしてスナップショットデルタの 復元が可能です 次は 外部ファイルアクセスを ビルが説明します ありがとう (拍手) ありがとう ジョン こんにちは 2年前に発表したFilesアプリケーションと FileProvider APIは クラウドベースの ドキュメント管理に最適でした 今年は さらに進化します 新しいiOSは ネットワーク共有ファイルや USB上のファイルへの アクセスをサポートします (歓声と拍手)
全USBストレージがサポートされます コンパクトフラッシュメモリーカードや メモリースティック USB RAID HDDなどです サポートするファイルシステムは 暗号化されていないAPFSと 暗号化されていないHFS Plus FATとExFATです (拍手) すべてのiOSおよびiPadOSデバイスで 利用できます USB-CのiPad Proか― Lightningデバイスならアダプタで利用可能です
ネットワーク共有では SMB3.0 Server接続をサポートします
Wi-FiやCellular イーサネット経由で接続できます 新機能満載です 特にiOSとiPadOSデバイスへの朗報は Windows Search Protocolでの検索です WSPのサポートで SMB Server内を検索できます
それはmacOS Catalinaの SMB Serverにも追加されます
ここでセキュリティの話をします セキュリティは ユーザがiOSに期待する機能です セキュリティを実現するために 私たちが使った2つのツールが プロセス分離と特権分離です 開発中は常に それを念頭に置いていました
ボリュームと共有における ファイルシステム操作は カーネルでなく 専用のプロセス空間で行います この分離は ユーザの求める セキュリティ確立に有効です
デモを見てみましょう
ここにiPadがあります
USBスティックが接続されていて メールが入ってます そして― Filesでは左に ロケーションがあります iCloud Driveやサードパーティの クラウドも表示されます USBデバイスを選択します
すると写真やドキュメントなど すべてのファイルやディレクトリが 表示されます
それらはFilesアプリケーションで 操作できます コピーならファイルを選択し ドラッグ&ドロップします コピー先を選択してドラッグし ドロップします フォルダに入りました
ではiPad上で 写真をコピーしてみましょう
これはインドのトマトの写真です
USBに保存してみます
ドキュメントを選択し “共有”に移動 リストの下の “ファイル”に保存します 保存先の一覧にUSBスティックが 表示されています それを選択して保存します
コピー完了です (歓声と拍手) アプリケーションデベロッパの方は 早速 活用法を考え中でしょう この機能はiOS13以降にリンクされる 全アプリケーションで使用できます アプリケーションの再構築で ぜひ生かしてください
例としてNumbersを見てみます
Numbersを開くと iCloud Driveから始まり USBが保存先に表示されます
それを選択すると―
全ドキュメントが見えます Numbersドキュメント以外はグレーです このドライブに Numbersドキュメントが2つあります 開いてみます 異なるローン金額と 異なる金利でのローン比較です 金利を引き上げてみましょう
おっと (笑い声) 200ではなく20です
これは あり得ないですね (笑い声)
ご覧のように 金利の額が変わりました
ではデベロッパのやるべきことは?
iOS 13から利用可能な機能なので アプリケーションを再構築し テストしてください
iOSに5種類の ファイルシステムを追加しました それらは内部フラッシュストレージの APFSとは若干異なります
iOSのファイルシステムは 大文字と小文字を区別しますが FATとExFATでは区別しません HFS PlusとAPFSは どちらにも設定できます
Cloneシステムコールは 使えないかもしれません これらの違いが重要となる場合は ボリュームの機能に注意してください
2つの異なるAPIがあります 1つはNSURLのresourceValuesで 作業中のファイルシステムの パラメータを渡します
それと ファイル移動に 時間がかかる場合があります
一時ファイルは作業ファイルの 近くに置いてください
それが役に立ちます Safe-Saveは最後にリネームするので ユーザは常に作業開始前と 新しく保存したファイルを 持っています その2つは 同じファイルシステム上に 必要です
もし一時ファイルが内部ストレージの コンテナに入ると 不要な入出力が発生します
そこでファイルマネージャが 助けになります itemReplacementDirectoryの URLを要求し 同じファイルシステム上に 一時ディレクトリを作れます
外部デバイスは消えることがあります ネットワーク圏外になったり Serverがダウンしたり ネコがケーブルを抜いたりします
アプリケーションは それらを想定して対処する必要があります 特に指摘したいのはmmapの危険性です mmapは強力ですが ファイルが消えた場合 カーネルが出せるのは バスエラーのみです
したがって NSDataを使う場合は NSDataにこう伝えます “安全ならファイルから データをmmapする”
また 外部デバイスは 内部フラッシュストレージの APFSより時間がかかります 大量のデータ入出力では 複数の操作を並行してください
まとめましょう セキュリティ強化でルートボリュームが 読み取り専用になります
ASRを利用した― スナップショットデルタを含む ボリューム複製が可能です
そしてiOSとiPadOSの 外部デバイスサポートと USBやネットワーク共有ファイルへの アクセス方法をお伝えしました
詳細について この後でラボがあります
そして明日は― CombineとFoundationについてです 外部メディア上のFoundationで できることを解説します ビデオセッションもあります “What's New in File Management”と “Quick Look”において UIドキュメントの説明を補足します ありがとうございました (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。