MacOSでのストレージについてのメモ


ストレージ周りについての調べたことについてのメモを残しておきます。
Macに限らず、一般的なことについても同時にメモしてあります。


間違っていることなどありましたら、是非ご教授ください。


ストレージ・ディスク

ストレージというのは、データの記憶装置の事を表し、不揮発性の記憶装置のことを指す。
揮発性というのは、通電しないとデータが失われるような性質がある記憶装置の性質のこと。揮発性のある記憶装置をコンピュータにおける「主記憶装置」と呼ばれ、一般に「メインメモリ、メモリ、RAM」と呼ばれるものは揮発性の記憶装置である。これはCPUなどから直接読み書きすることができる記憶装置で半導体素子により電気的にデータの記録や読み書きを行う装置であり、総称して「半導体メモリ」とも呼ぶ。

主記憶装置とは別に、「外部記憶装置」又、「補助記憶装置」、「ストレージ」「ROM」と呼ばれるものはデータを長期的に保存する大容量の記憶装置を表す。これらは様々な種類のストレージが存在している。

ストレージの例
フラッシュメモリ(SSD、USBメモリ、SDカード等々)
光学ディスク(CD、DVD、ブルーレイディスク等々)
磁気ディスク(ハードディスク等々)
磁気テープ(LTO等々)

それぞれ記憶させる仕組みや物が違い、それぞれ記憶容量や読み書きの速さ、保存期間なども異なってくる。

フラッシュメモリは、主記憶装置のメインメモリと同じく半導体素子を使った方法で記録する装置で、親戚みたいなものですが、RAMなのかROMなのかという違いがあります。

コンピュータに使われる補助記憶装置には、HDDなどといった仕組みにディスク(円盤)(プラッタ)を使ったものが多くつかわれていたので、ストレージの事を総称してディスクと呼ばれることもあります。
現代のPCではSSDのような半導体素子を使った読み書きの早いストレージも使われることは多いです。
つまり、ディスクとは補助記憶装置(ストレージ)の事を表しています。

ストレージには内蔵ストレージ(ディスク)外部ストレージ(ディスク)の大きく二つ存在する。

内蔵ストレージ(ディスク)とは、コンピュータ内部に取り付けられている記憶装置のこと。HDDやSSDなどが現在は主流。これらはコンピュータ内部のマザーボードと直接接続したストレージです。主に起動ディスクとしての役割として使用されます(下記詳細)。

外部ストレージ(ディスク)とは、USB通信などを使った有線接続でコンピュータと接続するストレージです。USBフラッシュメモリやSDカード、外付けHDD/SSDなど色々ある。から容易に取り外しが可能な記憶装置。HDDやSSD、USBフラッシュメモリー、CD/DVDなど色々ある。

外付け型のストレージに対して、サーバーに内蔵されたストレージをDAS(Direct Attached Storage)と呼ぶことがある。本来的な意味からは、筐体内蔵か外付けか、という視点ではなく、そのサーバーのみからアクセスされる占有型の接続か、複数のサーバーから共有される形の接続か、という点に注目した言葉だ。しかし、エンタープライズ向けで外付け型の独立した筐体をもつストレージはほぼ例外なく共有型の接続をサポートしているので、現実問題としては“DAS=サーバー内蔵のHDD”と考えて問題はない。サーバーにRAIDコントローラーが実装されていれば、内蔵型HDDでもディスクアレイ化して利用することは可能なのだが、この場合はサーバーごとにそれぞれ個別のストレージを持つことの無駄/容量効率の低さというDAS固有の問題はそのまま残る。
引用 : https://ascii.jp/elem/000/000/616/616849/

NAS(Network Attached Storage)
内蔵ディスク、外付けディスクどちらにせよ、これらはパソコン(コンピュータ)に対して1対1で接続して使用する形となる。これをDAS(Direct Attached Storage)という。
これに対して、2台以上のパソコンで同じストレージに保存されたファイルを編集したい場合は物理的に接続し直さないといけない。これはかなり面倒でパソコン間のデータ共有して使うには向いていない。

NASはネットワーク、LANに接続して1対多の通信を行い複数のパソコンから同時に同じデータを編集できるストレージシステムのこと。

画像15

画像14

[引用画像] https://www.iodata.jp/product/nas/info/landisk/nas.htm

NASと似たような概念のシステムとして、ファイルサーバーというのが存在する。
ファイルサーバーはネットワーク上で他のコンピュータとファイルを共有したりできるコンピュータのことを指す。つまり、Windows系やLinux系などのOSが入ったコンピュータによりアクセス制限などのセキュリティの管理やストレージの増設など拡張性に優れている面がある。なんだったら、勝手にファイルサーバーと決めつけているだけのコンピュータなため、他のサーバーとしての機能をもたせることもできるのがOSを搭載したコンピュータとしてのサーバーを使うことのメリット。
NASは機能面としてはファイルサーバーと非常に似ているので、もっと狭義的なファイルサーバーであり、サーバーとしての機能がネットワークハードディスクの中に含まれているがWindows系やLinux系などのOSが入っているわけではないのでOSレベルの拡張性は低い。またカスタマイズ性も低い。

現代は、オンラインストレージ(クラウド)と呼ばれるものも使われており、コンピュータに物理的に接続された記憶装置ではなく、インターネットを通して遠くにある記憶装置を利用する方法です。





起動ディスク

OSシステムソフトウェアが含まれているディスクのこと。つまり、OS周りの大事なファイルが入っているディスクのこと。主に内臓ディスクが起動ディスクとして使われるが、外部ディスクからOSを起動することもできる。


MacOSの起動ディスクを変更する方法は以下を参照ある。




パーティションとボリューム

パーティション(partition)とは仕切りを意味する言葉で、
ストレージにおけるパーティションは、データ上の仕切りのこと。
パーティションによって、ストレージ内のデータの部屋(家)を切り分けることができる。

基本的に記憶装置は、パーティションが存在し、パーティションの中にデータが存在することとなっている。これは、領域が1つしかなくてもそれはパーティションと呼ぶ。

このパーティションのシステムはのちに説明するファイルシステムと関わっているシステムなため基本的にパーティションというものが必要となる。

似たような概念にボリューム(Volume)というものがある。
ボリュームとパーティションの違いは

パーティション  : 物理的な領域
ボリューム : 論理的な領域

どちらも、記憶装置上の設けられた特定の領域のことを表す概念だが、
パーティションは記憶装置の中に区切られた物理的な領域を表し、
それをOS上で扱うために論理的に割り当てている領域をボリュームという。
ファイルをファイルとし読み込むために、ファイルシステムという仕組みが動作するがそのためにに必要な管理領域をパーティションから引いた値がボリュームと考えることができる

また別な文脈では、
パーティションはあらゆるファイルシステムで分割された領域で
その中でもOSに認識されたものがボリュームとよばれることもある。

ボリュームとパーティション
ボリュームはパーティションと呼ばれることもありますが、厳密には間違っています。 理由は次のとおりです。ハードドライブは、1つまたは複数のパーティションに分割されます。 各パーティションはハードドライブ上の領域を占有します。 たとえば、 250GBの4つのパーティションに分割された 1TBのハードドライブを考えてみましょう。 最初の2つのパーティションは、標準のMacファイルシステムでフォーマットされていました。 3番目のパーティションはWindowsファイルシステムでフォーマットされました。 最後のパーティションはフォーマットされていないか、Macが認識できないファイルシステムでフォーマットされていました。 Macには2つのMacパーティションとWindowsパーティションが表示されます(MacはWindowsファイルシステムを読み取ることができるため)が、4番目のパーティションは表示されません。 まだパーティションですが、Macではファイルシステムを認識できないため、ボリュームではありません。

Macがボリュームを認識すると、デスクトップにボリュームがマウントされるため、そのボリュームに含まれているすべてのデータにアクセスできます。
[引用]
https://ja.eyewated.com/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%80%81%E3%83%9C%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%A0%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AF/


後に紹介するLVMの話が出てしまうが、LVMは複数のパーティション(ストレージ)を1つのボリューム(記憶装置)として扱っていることとなる。
RAIDも似た概念

また、似たような概念としてドライブというものがある。
ドライブは主にWindows系のOSにて用いられる用語でボリュームとほぼ似た概念。
ただ後に紹介するマウントの概念際に異なる動作をする。

パーティションテーブル / パーティションマップ

ディスク(ストレージ)のパーティションを定義する情報を保存している領域のこと。

ディスクごと、HDDごと、記憶装置ごとにパーティションテーブルは存在し、このパーティションテーブルの情報によってパーティションが決まる。

パーティションテーブルの種類として

・MBR(マスターブートレコード)のパーティションテーブル
・GUIDパーティションテーブル(GPT)
・Appleパーティションマップ

が存在する。MBRとGUIDパーティションテーブルを比べるとGUIDの方が新しい仕組みである。これらは全く別の仕組みで、互換性はない。

パーティションテーブルはディスクの初期化の際に設定される。


・MBRパーティションテーブル

・OSに対しての互換性 : ○
・UEFIブート : ×
・領域の上限 : 2TiB
・パーティションの数 : 最大4

MBRはBIOSに使われている。
パーティションの数はこの後説明する、プライマリパーティションと拡張パーティションを指す。
論理ドライブを使えば、MBRディスクでも5つ以上のパーティションを作成することができる。

後からパーティションを追加・削除・サイズ変更ができない
保存できるファイルのサイズは4GBまで

AppleシリコンMac/インテルMac / Power PC Macの起動ディスクには使えない
APFSは使えない
HFS+の暗号化オプションは設定できない

スマホやデジカメのSDメモリや2TB以下のHDDの標準形式

・GUIDパーティションテーブル (GPT)

・OSに対しての互換性 : △ ※Windows Vista以降で対応
・UEFIブート : ○
・領域の上限 : 事実上なし
・パーティションの数 : 最大128

OSに対しての互換性は実質現代においてほとんど問題はない。
AppleシリコンMac / インテルMacでの起動ディスクではGUID必須
ファイルシステムのAPFSを使うにはGUIDが必須。

後からパーティションを追加・削除・サイズ変更ができる

古い外付けHDDケースでは対応していない可能性がある。
スマホやデジカメのSDメモリには使えない

・Appleパーティションマップ

Windows OSでは使えない。
AppleシリコンMac/インテルMacで起動ディスクには使えない(OS X 10.5 Leopard除く)
スマホやデジカメのSDメモリには使えない

PowerPCプロセッサを搭載していた古いMacで使用する場合(Power Mac G4とかG5など)にこちらを選択
[引用] https://note.com/sound2020/n/n10c4ac2863c7



BIOSブートUEFIブートとは

BIOSとはマザーボードに搭載されているプログラムのことで、OSをインストールする前から動くソフトウェア。このBIOSを使ってコンピュータを組み立てた時にハードウェア状況を確認することができる。またOSをインストールするためにBIOSから操作を行うことができる。
UEFI BIOSもBIOSと同じようなプログラムのことで、BIOSの後継として拡張されたファームウェアとなる。第三世代のCore iシリーズの時期からマザーボードに搭載されている。現代はほぼUEFIとなっている。

BIOSをインストールすると、MBR
UEFI BIOSをインストールするとGPTのパーティションテーブルに必ずなる。
前者をBIOSブート、後者をUEFIブートという。

Windowsで言えば、現在の起動ドライブが、MBRならBIOS、GPTならUEFIということも分かる。





・Mac OSの場合の確認の仕方
ディスクユーティリティから表示 > 全てのデバイスを表示(cmd + 2)
でディスクやコンテナの情報を表示して、ディスクを選択した際、またはディスクを削除しようとした際に見ることができる

画像16


画像17


ブートセクタ

基本的に記憶装置上には最小単位として「セクタ」として保存されている。

その一つのセクタとして「ブートセクタ」というものがある。
ブートセクタはファイルですらなく、この先のファイルを読み込むために必要な情報が収められている部分。
ブートセクタを読み込まなければファイルをファイルとして認識することができない。
用語の意味が広義的な意味と狭義的な意味の場合があるので注意が必要

広義的なブートセクタは大きくMBRPBSの二つに分けれる。

MBR(マスターブートレコード) :
パーティションテーブルのMBRと同じ名前で混乱するが、以下のような 構造になっている。

画像18

[引用画像] https://wa3.i-3-i.info/word15562.html

MBRの中に、ブートローダーとパーティションテーブルが存在する。
ブートローダは起動時に呼び出されて、OSを動かすプログラム。
パーティションテーブルは先ほども説明したパーティションに関する情報が書かれている場所。

PBS(パーティションブートセクタ) : 
パーティションの最初のセクタであり、各パーティションごとに1つある。
単にこのPBSを狭義的なブートセクタとも呼ぶ。

画像19

[引用画像] https://wa3.i-3-i.info/word15562.html

このPBSは、パーティション内のセクターとして管理されているデータをファイルとしての単位で管理するために必要な管理情報が記述されている

いわゆるパーティションのフォーマット(削除)は、このPBRの情報とファイルシステムの管理情報を主に書き換えている行為なので、実際のパーティション内のセクターとして管理されているデータのほとんどの領域はその場で書き換えられていないことの方が多い。

つまり、このPBS内のブートセクターに問題が起きるとこの先のセクターの内容を定義する部分なのでアクセスできないなどデータが壊れる。

このPBR内のブートセクターは1セクター分の容量しかない。
ブートセクター内の情報としては主に2つ管理している。
・ディスクパラメータ
・ブートストラップローダー

ディスクパラメータ:
そのパーティションの固有の情報
セクタサイズ、クラスタサイズ、総セクタ数、 MFT(マスターファイルテーブル)の位置等が書かれている
つまり、ブートセクタが属するパーティションのファイルシステムに関する定義情報が書かれている。
これを読み込まないと後に続くパーティション内のセクターをファイルとして認識することができない。

ブートストラップローダ :
プログラム部分。
「Windows NT」系のOSだと、 ブートローダ本体である「NTLDR」や「BOOTMGR」を読みに行き、 Windowsを起動していく引き金となるもの。
つまり、OSの起動に必要なもの。
アクティブパーティション(起動ディスクとして指定されたパーティションをアクティブパーティションと呼ばれる。)のブートストラップローダが正しくないとOSの起動処理が行われない。
ブートストラップローダーは全てのパーティションに必要なものではない。
OSがインストールされえているディスクで、アクティブパーティションのブートセクタにのみ必要とされるもの。
データ保存用として使われるようなパーティションであれば、ブートストラップローダがなくても正常に動作する。

ディスクパラメータの修復は一般に困難あ作業になる。
パーティションのフォーマット完了時に、ブートセクタのバックアップが同時に作られているので、これを利用し修復を試みることはできる。
それには、セクタ単位での操作ができるエディタ、セクタエディタが必要なため簡単ではない。

ブートストラップローダの修復はOSのブートローダーと対になって意味を成すもののため、ほぼほぼOSの一部ということになるため修復はかなり難しい。


MBRディスク方式の大まかな流れを確認すると、
マスターブートレコード(MBR)のブートローダを読み込み、
そこからその次のパーティションテーブルを見て、パーティション情報の定義を確認する。パーティションテーブルに書かれているOSの入っているパーティションを把握する。
そのパーティション内のPBS内のディスクパラメータを見てファイルシステムのの情報を確認する。
ブートストラップローダ より、OSを起動させる。



まとめるとそれぞれの記憶装置上に、1つのMBRとパーティションの数分のPBSがあるということになる。
※拡張パーティションの論理ドライブでは拡張ブートレコードとPBSが1セットになる。
これはGUIDディスクにおいても同じ構成。

ちなみに、GUIDパーティションテーブルを使っているGPTディスクにも、MBRは存在します。
GPTディスクにおけるMBRのパーティションテーブルは、
「GPT保護パーティション」として、編集されないための情報があるだけで、
パーティションを規定するものではありません。
具体的なパーティションに関する情報は、GUIDパーティションテーブルにのみ保存されています。
[引用] https://pctrouble.net/storage/partitiontable.html#mbr


パーティションの種類

・プライマリパーティション
・拡張パーティション
・論理ドライブ

拡張パーティションと論理ドライブは古いシステム(MBR)に対して作られたパーティションであるため多くの場合は、プライマリパーティションを指す

・プライマリパーティション

一般に使われるパーティション。
プライマリーパーティションは起動ディスクとして指定できる。むしろ逆に起動ディスクに指定できるのはプライマリパーテションだけ。
そして、起動ディスクとして指定されたパーティションをアクティブパーティションと呼ばれる。

MBRパーティションテーブルは上で説明した通り、4つまでパーティション情報を格納できる。したがって、1つのディスクに対して4つまでのプライマリーパーティションを作成できる。

GPT(GUID)には128となっていて、ほとんど上限を機にする必要がない。

前述のアクティブパーティションというOSの起動ディスクとして指定されたパーティションは従来、MBRのディスクにおける仕様であり、GPTのディスクから起動するUEFIブートには関係はない。


・拡張パーティション

拡張パーティションは、「論理ドライブ」を書くのするためのパーティション。つまり論理ドライブありきのパーティションであり、それ単体では価値のないような特殊なパーティション。
プライマリパーティションとは異なり、複雑な構造になっており、拡張パーティション自体に直接ファイルを保存することはできない。

拡張パーティションはディスクに1つしか作成することしかできない。
仮に複数の拡張パーティションを作成できたとしても意味がとくにない。

MBRはパーティションを4つまでしか作成できないといったうちに拡張パーティションもその1つとして扱われる。つまり、プライマリパーティションと拡張パーティション合わせて、計4つまでしか作成できない。
ただし、拡張パーティション内に作成できる論理ドライブを用いると4つを超えた領域を確保することができるようになる。

・論理ドライブ

論理ドライブは拡張パーティションの中に作成できるドライブ。
パーティションのように扱われるが、厳密には他のパーティションとは異なる存在。
論理ドライブは、数に制限なく作成することができる。

論理ドライブが拡張パーティションの中でだけ作成できるのは、拡張パーティションと論理ドライブのブートセクタが特殊だからである。


拡張パーティションのブートセクタ
EBR(拡張ブートレコード、EPBR(拡張パーティションブートレコード))というブートセクタが存在する。
位置的には、PBS(パーティションブートセクタ)と似ているが、内容的にはMBR(マスターブートレコード)に近い存在。
つまり、EBRの中にパーティションテーブルが存在することとなる。
論理ドライブの領域情報はMBRでhなくて、EBRの中に書かれている。

論理ドライブのブートセクタ
拡張パーティションの中にある論理ドライブには、プライマリーパーティションと同様に、ブートセクタが存在する。
これは拡張パーティションのEBRと論理ドライブのブートセクタが一対になって管理される。
つまり、論理ドライブを複数作成した場合は、必ず直前に自動的にEBRが作られることでEBRと論理ドライブのブートセクタが一対の形となる。
EBRの中には、直後の論理ドライブの領域情報と次のEBRの位置が記されている。

拡張パーティションはEBR同士を参照することで論理ドライブを特定する仕組みになっているということ。

画像20

拡張パーティションと論理ドライブの構造
[引用画像] https://pctrouble.net/storage/partition_difference.html#primary

ユーザーが作成する拡張パーティションは1つだけだが、
内部的には論理ドライブの数だけ拡張パーティションが存在していることと同じで、入れ子構造となっている。

画像21

比較対象として、プライマリパーティションの構造も図にしました。
こちらは、拡張パーティションと違って単純でわかりやすいです。
これらのパーティションとは別に、ディスクの先頭にMBRがあり、
MBRの中にあるパーティションテーブルに、各パーティションの情報が書かれています。
つまり、すべてのプライマリパーティションと、最初の拡張パーティションの情報ですね。
[引用・引用画像]
 https://pctrouble.net/storage/partition_difference.html#primary


パーティションを分割するメリット

・別のドライブ(ディスク、ストレージ)として扱える。
一つのHDDを3つのパーティションで分割したとしたら、ユーザ側としては3つのHDDを接続したような気分で扱える。
データ管理の側面として、場所を分けて管理したい場合にもちろん便利だが、特にデータのリカバリーの側面としても効果がある。
仮にパーティションA, B, Cという名前で認識していたとして、
Aの一部のデータに問題があり、ストレージとして壊れてしまったとしても。B,Cのパーティションは別ストレージとして動いているためデータに全く問題がない。

・別ファイルシステムとして保存できる。
同じHDDだとしてもパーティションで分割すれば、ファイルシステムがそれぞれ異なるファイルシステムでフォーマットして運用することができる。
AはMac OS ジャーナリング、 BはexFAT、CはNTFSなど。






マウント

Linux系やUNIX系OSでは、外部のストレージ・リソースは全てファイルという概念で扱うこととなっている。そのため、ストレージデバイスを表すファイルはデバイスファイルと呼ばれ、/dev/以下に配置される。

このデバイスファイルそのままでではフィイルシステムとして利用するにはマウントという処理を行う。
マウントという処理を使ってディレクトリに設置する必要がある。
ディスクのファイルシステムは任意のディレクトリにマウントできる。
パーティションごとにマウントする。

画像28

dfコマンドで確認するとわかると思うが、このシステムでは/dev/vda2にファイルシステムが展開されており、これが/にマウントされている。状況としては/dev/vdaのディスクがこのシステムのファイルシステムとして展開されている状況になっている。
[引用・引用画像] https://news.mynavi.jp/article/liunx_win-11/

ファイルシステムの一番上は「 / 」(root)であり、唯一これしか存在しないこととしている。ストレージはこの「 / 」以下のどこかにマウントされてアクセスされる仕組みになっている。

一般に、/mnt や /media にマウントされることが多い。


ストレージ等々を安全に取り外す際はアンマウントしなくてはならない。
アンマウントせずに記憶媒体の接続を外した場合は、ファイルシステムが破損する可能性があるので注意。



デバイスファイルはスペシャルファイル(spacial file)とも呼ばれる。
ファイルシステム上であたかも通常のファイルのような感じで見えるが、
デバイスドライバのインターフェースとして存在している。
つまり、このデバイスファイルに何かしらの命令やアクセスをすることで、デバイスドライバーを通して物理的なハードウェアに対して命令を行う。


画像29

このデバイスドライバに対しての命令を簡単にするために用意されているのが「デバイスファイル」です。
デバイスドライバにやって欲しいことがあれば、デバイスファイルさんに言えば代わりに伝えてくれます。
例えば、プリンタのデバイスファイルさんに「おい、ちょっくらこれを印刷してよ」と命令しました。
そうするとデバイスファイルさんはデバイスドライバさんに対して「印刷してって言われた~」と伝えます。
その伝言を聞いたデバイスドライバさんはえっちらおっちらとプリンタを動かして印刷してくれるのです。
デバイスファイルに対してアレコレすると、それがデバイスドライバに伝わります。
デバイスドライバにアレコレが伝わると、デバイスドライバはその伝わったアレコレに従ってデバイスを動かします。
つまりデバイスファイルに対してアレコレすることで(デバイスファイル、デバイスドライバを経由して)デバイスを動かすことができるのです。
[引用・引用画像] https://wa3.i-3-i.info/word11689.html
デバイスファイルはデバイス(ハードウェア)をファイルとして表現したものです。
アプリケーション(ユーザー空間)とデバイスドライバ(カーネル空間)間でデータを送受信するためには、両者を結びつける「何か」が必要です。
その「何か」がデバイスファイルです。
デバイスファイルは通常、「/dev」配下に保存されており、原則ひとつのデバイスに対して、ひとつのデバイスファイルが存在します。
例えば、「/dev/hda」ファイルは1台目のIDE(ATA)ハードディスクを表しています。
「表している」とはつまり、ソフトウェア(ユーザー空間)から見れば、「/dev/hda」がIDEハードディスクあると見えるわけです。
そしてこのファイルを操作することは、IDEハードディスクを操作するということに対応します。
デバイスファイルには下記の種別が存在します。
・ブロック型デバイス(block)
・キャラクタ型デバイス(character, unbuffered)
・名前付きパイプ(pipe)
ハードディスクやUSBメモリはブロック型デバイス、プリンタやモデムはキャラクタ型デバイスに該当します。
名前付きパイプはプロセス間通信を行う際に使用するデバイスファイルです。
[引用] http://linux-dvr.biz/archives/41





Windows ドライブ

WindowsOSではHDD等々のストレージはドライブ(論理ドライブ)という概念で扱われる。
特に、システムがインストールされている基本ドライブにはC:という名前が付けられている。その他ストレージデバイスはD:, E:と続いてアルファベットの名前がつけられていく。

このドライブ名がWindowsでは絶対パスの最も上位にくる。



LVM / Logical Volume Manager


Linux系列のパーティションを管理するシステムのこと。
直接HDD等々にファイルシステムをマップするのではなく、粗粒度のブロックによりいったん論理ボリュームと呼ばれる仮想化されたボリュームに束ねて利用するためのシステム。
動的かつ自在にディスクのパーティションを変更できる仕組み。
複数のHDDやパーティションにまたがった記憶領域をまとめて単一の論理ボリューム(LV)として扱ことのできるディスク管理機能。

ユーザーからは通常のパーティションと同様に扱えて、作成されたLVを任意のフォーマットで利用できる。また、システムを停止せずに論理ボリュームサイズの増減を自由に行うことができる。

画像39

[引用画像]
 https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:LVM_Comparison.jpg

画像41

画像40

[引用画像] https://qiita.com/miyuki_samitani/items/ee3f93fa82d6ada1fa37
ディスクのパーティションというと、Linuxならばfdiskとかpartedとかがぱっと出てくると思うんだけども、LVMもまあこいつらみたいな機能を持っている。fdiskやpartedでも一応パーティションのサイズを広げたり縮小したりすることは出来るけども、その場合は原則的に「連続した領域」でなければならないところ、LVMにはそういった制限が無い。
 例えば、あるディスクにパーティションが3個あったとして、それぞれをsdc1、sdc2、sdc3だったとします。通常、1から順にディスクの先頭からパーティションを割り付けて行きます。たとえばこんな感じに。

デバイス Boot Start End Blocks Id System
/dev/sdc1 1 25 200781 83 Linux
/dev/sdc2 26 286 2096482+ 83 Linux
/dev/sdc3 287 4421 33214387+ 83 Linux

シリンダ番号(StartとEndのところの数値)が隣接している状態なので、この状態でsdc2を拡張したい!ということになっても、そのままでは拡張できず、sdc3を一旦開放してからsdc2を拡張し、その後にsdc3を再度作成みたいなことをしないといけなくなる。ということは、sdc3が使用中だったりすると、その中身を一旦どこかに待避するなどの作業が必要になってしまう訳。
Windows等の場合には、市販のソフトでそういう操作を全部自動でやってくれるものがあるけども、Linuxの場合にはLVMがそれをやってくれる…ということになる。
 また、LVMが突出して優れているのはパーティションを複数のディスクにまたがって作成できるという点。
 つまり、この点を強調すると、容量の小さな複数のディスクを1個の大きなディスクに束ねる…みたいな使い方もできるよ!ということ。
ここで、「それってRAIDコントローラが持ってるようなJBOD(スパニング)と何が違うのよ!」という質問が当然に出てくると思うのですが、効能的にはぶっちゃけ一緒です。(笑)ハードRAIDなコントローラにお任せしてしまえばCPUに負荷が掛からないのに対して、LVMだとその辺の処理を全部CPUがやることになるので負荷的には不利と言えば不利になります。が、LVMだとディスクの容量を動的に変更できる点がJBOD(スパニング)に対して優位であると言うことも出来るでしょう。
JBOD(スパニング)の場合にディスクを追加して全体の容量を拡張したいなんて場合には、それこそ先ほどのfdiskやpartedでパーティションのサイズ変更をするのと同じような話になってしまう。つまり、そのディスク上にあるデータを一旦全部どけてからRAID(JBOD)を再構築しなおして…というハメになる訳ですよもう。しかし、LVMだったらディスクを増設したらそのディスクを次々と追加すればよい訳。
[引用] https://piro791.blog.ss-blog.jp/2008-11-04

画像35

[引用画像] https://www.pmi-sfbac.org/linux-lvm/

PE (Physical Extent)

LVMはHDD等々をPE(フィジカルエクステント)という記憶領域に分割し必要な時分だけ使用することができる。
PEはLVMが取り扱う記憶領域の最小単位でデフォルトのサイズは4MB。8KB~512MBでの範囲で指定できる。
PEの数は最大65536個となっていて、デフォルトの4MBでLVを作成する場合は、最大で256GBまでとなっている。それ以上のサイズのLVを作成するには、このPEのサイズを4MB以上にする必要がある。

つまり、下記の物理ボリュームの中をたくさんの物理エクステントを最小の単位として要領を管理している。

画像36

PEサイズ4MBと8MBで100MBのパーティションを作成した場合のイメージ
むやみにPEサイズを大きくとってしまうと端数が発生し無駄な領域が生じてしまいます。
[引用・引用画像] https://www.pmi-sfbac.org/linux-lvm/

PV (Physical Volume)

フィジカルボリューム(物理ボリューム)とは、物理的な記憶媒体を指す。つまり、HDDそのものなど。このPVを単位としてLVMの制御下に置くことになる。
このPVはHDDのパーティション単位で扱われる。ディスク単位ではない。
HDD全体をLVMの制御下に置くことやHDDの部分的な領域をLVM制御下に置くこともできる。

ハードディスクの領域を部分的にLVMの制御下に置くこともできる。その場合は、fdiskやpartedでハードディスクそのものに一度パーティションを切っておき、そのパーティションに対して物理ボリュームを作成する(割り当てる)ことになる。
[引用] https://piro791.blog.ss-blog.jp/2008-11-04

物理ボリュームの操作に関連するコマンドの多くは、「pv」で始まるコマンド名となっている。

通常は物理ディスクに対して1対1で作成するが、複数のパーティション単位に`PV


VG(Volume Group)
1個以上PVをまとめて、1つのボリュームグループ(VG)を構成する。

PEはVG作成する際に自由に変更することができる。
VG作成後であっても、条件付きで動的に変更することもできる。

仮想的なディスクに相当すると考えると良い。

ちなみに、LVMが自在にパーティションのサイズを変更できる理由も、この物理エクステントにある。パーティションの管理をハードディスクに固有の「シリンダ」でなく、物理エクステントを単位として管理しているため、パーティションが作成されている物理エクステントの位置そのものは連続している必要性が全くない上に、同一のディスク上にある必要性も無い。このため、パーティションを拡張するにしても、ボリュームグループの中に空いている物理エクステントがあればいつでもパーティションの拡張は可能ということになる。
[引用] https://piro791.blog.ss-blog.jp/2008-11-04

画像37

[引用画像] https://www.pmi-sfbac.org/linux-lvm/


ボリュームグループの操作に関連するコマンドの多くは、「vg」で始まるコマンド名となっている。

LV(Logical Volume)

論理ボリュームとは、VGを仮想的なディスクとするなら、パーティションと似た存在。
最終的に作成された論理ボリュームに対してファイルに対してファイルシステムを作成する操作をする。

実ファイルを格納する領域。LVはPEの集合で作成されており、作詞絵するLV容量はPEの倍数で最も効率的になる。

画像38

[引用画像] https://www.pmi-sfbac.org/linux-lvm/


これはまさに、ハードディスクにfdiskやpartedで作成したパーティションに対してファイルシステムを作成する操作をすることを思えば理解しやすいと思う。
論理ボリュームの大きさは動的に変更することが可能。1点だけ要注意なのは、論理ボリュームを拡張したからといって、ファイルシステムの大きさが自動的に広がるわけではないということ。論理ボリューム(やパーティション)≠ファイルシステムであることに留意が必要。
[引用] https://piro791.blog.ss-blog.jp/2008-11-04

 論理ボリュームの操作に関するコマンドの多くは「lv」で始まるコマンド名になっている。

スナップショット

LVMにはスナップショットという機能が備わっている。
これは論理ボリュームのある時点でのデータのコピーであり、ただし実態は元データへのリンクなのでデータ量は少ない。
元データが更新された場合のみ更新前のデータをスナップショット領域に保存する。ファイルシステムのバックアップ用途として使われる。

画像42

画像43

その瞬間のボリュームのイメージのことです。
スナップショットは、サービスを停止せずに取得することができます。(もちろん多数のデータ更新があるデータベースが入っているボリュームのスナップショットの場合、整合性は保証できなくなります)
スナップショットはコピーバックアップと異なり、基本的にデータは持っていません。
そのため、スナップショット取得後にデータが更新された場合は、更新される前のデータをスナップショットが保持することでスナップショット取得時の状態を保持します。

スナップショットを取得した直後は、元データの変更がないので、スナップショットの中身もスカスカだよ

でもデータが更新されたらスナップショットは更新される前のデータだけを持つことでボリュームのサイズを節約しているよ

※スナップショットはバックアップではありません。

[引用] https://go-journey.club/archives/557
LVMにはスナップショットと呼ばれる機能が備えられています。これは、論理ボリュームのデータをスナップショットとして取得した時点で、読み取り専用の別の論理ボリュームとしてコピーしておく機能です。スナップショットは論理ボリューム上のすべてのデータのコピーを行うのではなく、元データへのリンク情報のみを作成するため、非常に高速に動作します。スナップショットの取得後に、元データが更新された場合、更新される前のデータをスナップショット領域に保存します。そのため、通常は元データの領域よりも少ない領域(一般的には10%~20%程度)があればスナップショットとして利用できます。
さらに、スナップショットに対しては読み込みしかできないため、データが更新されるといった危険がありません。このため、ファイルシステムのバックアップを取得する際に、まずスナップショットを取得して、バックアップ操作はスナップショットに対して行うことで、バックアップ実行中のデータ更新も発生しなくなるため、バックアップデータの一貫性が保たれます。このようにスナップショット機能はファイルシステムのバックアップを取得する目的に非常に合致します。
[引用]
https://users.miraclelinux.com/technet/document/linux/training/2_2_3.html





アロケーションユニット / クラスター / ブロック

アロケーションユニットサイズ / クラスターサイズ / ブロックサイズ

ファイルやディレクトリに割り当てられる最小の容量単位のこと。
特にWindowsではアロケーションユニットサイズとも呼ばれる。
ブロックサイズとも呼ばれる。

前述した、セクターはハードディスクなどのトラックの一部で扱われる、ディスク上のデータの最小単位。
セクターサイズはハードディスクなどに依存するが一般には、512byte。デバイスの高速化、およびデータの大容量化に伴いセクタサイズを大きくした、4KByteもある(4KByteはOS側でサポートしてなければならない)。
このセクターを複数まとめた単位がクラスター(アロケーションユニットサイズ)と呼ばれて、どんなファイルも必ず少なくともクラスタサイズの容量で管理される。また、これは後述するファイルシステムに依存するものである。

つまり、たとえファイル自体に必要な容量が1byteであっても、
クラスターサイズが4096byteだとしたら、4096byte消費することとなる。

画像23

[引用画像]
http://tooljp.com/windows/doc/cluster-sector-difference/cluster-sector-difference.html

画像24

1つのセクターが512Bなので、残りの1Bのデータは2つ目のセクターに保存されます。
513Bのファイルもセクターではなくクラスターで管理しているので、パソコンは4096Bのファイルとして認識してしまいます。
[引用・引用画像] https://pc-kaizen.com/what-is-allocation-unit-size

基本的に、あたりまえだが、クラスターサイズはセクターサイズの整数倍にしないと非効率になる。
Windowsでは一般に、8個のセクターをまとめて、
1クラスター = 4096byte(約4Kbyte)として扱われる。
ただし、パーティションのフォーマット時に、クラスターサイズを任意に変更することもできる。

画像25

[引用画像] https://www.newtech.co.jp/support/windows/i_WS000010.php

クラスターサイズにより無駄に消費している容量領域を「クラスターギャップ」と呼ぶ。


Advanced Format Technology(AFT)

画像26

[引用画像] https://www.pcksfactory.com/hdd/aft.html


4KBのセクターサイズにした記憶効率を高めHDDの向上を図った4Kセクターと呼ばれるものはAdvanced Format(AFT)と呼ばれる。
一方として従来の512ByteのHDDは非AFTと呼ばれることがある。
非AFTのHDDが搭載されているコンピュータでAFTのHDDtとの互換性を維持するために、実際のデータの読み書きのやりとりを512Byte単位でエミュレートする機能を搭載している。
HDDの仕様書などでAF(512e)などと記載されていることがあるが、これは
OSが512Byteしかサポートしていない場合は512e(e=エミュレーション)というモードで動作し、物理セクターサイズ=4KBなのに論理セクターサイズ=512ByteとしてOSから認識することができるHDDを表している。

現在はAFTタイプのHDDがほとんど流通されている。

fdisk -lでAdvanced Formatを見たときに以下のようになる。

$ fdisk -l 

Sector size (logical/physical): 512 bytes / 4096 bytes


Macでのinfo(情報を見る)での表示では

画像30

サイズ : ファイルなどの実データサイズ
(括弧内) : 実際に使用するクラスターサイズ(アロケーションユニットサイズ)

Windowsでのプロパティでの表示では

サイズ : ファイルなどの実データサイズ。
ディスク上のサイズ : 実際に使用するクラスターサイズ(アロケーションユニットサイズ)

と呼ばれている。


では、ファイルをクラスターで管理せずセクターで管理すればクラスターギャップは起きず、空き容量を無駄なく使えるのでは?」と思うかもしれません。
先述で少し触れましたが、セクターでファイルを管理すると、1つのファイルが細かすぎるのとファイルが連続していないこともあるため、様々なセクターにアクセスしなければなりません。
結果、ファイルを開く(読み込み)、ファイルを保存する(書き込み)作業の時間が、大幅に増えパソコンが重くなってパフォーマンスが落ちてしまいます。
よって、ファイルをセクタではなくクラスタで管理していれば、アクセス回数を減らせたり、連続したファイルになる可能性が増えるため、読み込みと書き込みの時間が短縮できパソコンが高速化します。

[引用] https://pc-kaizen.com/what-is-allocation-unit-size




ファイルシステム

一般にコンピュータはデータの読み書きなどの操作をファイル単位で行う。HDDなどの記憶媒体のセクター単位で記憶しているデータを抽象化し、ファイル単位で制御するシステムをファイルシステムという。


そもそも、ファイルシステムはハードディスクやフロッピーディスク、CD/DVD-ROMといった二次記憶媒体にデータを保存し、そのデータを読み書きする方法を提供するために作られたものである。つまり、情報を永続的に記録する必要がない場合や、揮発性メモリ(RAM)に一時的にデータを持ち、電気が切れてしまえばその情報は再現できなくてもよい場合は、ファイルシステムは不要である。組み込みシステムなどでは、こうした理由によりファイルシステムを実装しないものもある。データの保全性が重要視される汎用機系システムの需要の拡大は、ディスクを効率的に使用し、その安全性の保証を目的とするファイルシステムの発展を促してきた
[引用] https://atmarkit.itmedia.co.jp/ait/articles/0305/20/news002.html


APFS (Apple File System)

macOS 10.13 High Sierraから段階的に導入
GUIDパーティション必須
1つの物理的なパーティションの中に、複数の論理パーティションを作成可能
上記の特徴により、論理パーティション間で空き容量の共有が可能
さらに、論理パーティションを柔軟に追加・削除することが可能

でもMac OS 10.12以前の古いMacでは認識しません。
(MacOS 10.12.6ではマウントし読み書きが出来ます)
[引用] https://note.com/sound2020/n/n10c4ac2863c7


基本的に標準設定だと、ファイル・フォルダは大文字・小文字を区別しない。つまり、同じディレクトリに「test」「TEst」という二つのフォルダは存在できない。

APFS(暗号化):APFSフォーマットでディスクを暗号化します。フォーマット後、最初のマウントする時にパスワードを求められます(キーチェーン対応なのでキーチェーンに登録すればいちいちパスワードを入れる必要はありません)
APFS(大文字/小文字を区別):APFSフォーマットで、ファイル名やフォルダ名の大文字小文字を区別します。たとえば、「sound folder」と「SOUND FOLDER」は別のフォルダとして認識します。大文字と小文字を区別するのでアプリによっては対応していない事があります。 
APFS(大文字/小文字を区別、暗号化):APFSフォーマットでディスクを暗号化し、ファイル名やフォルダ名の大文字小文字を区別します。たとえば、「sound folder」と「SOUND FOLDER」は別のフォルダとして認識します。
[引用] https://note.com/sound2020/n/n10c4ac2863c7





HFS (MacOS標準フォーット)

Mac OS 10.5 Leopardまでは読み書き可能、10.11 El Capitanまで読み込みのみ可能で、現在では古いデータの読み出し以外使うことはない


HFS+ (MacOS拡張フォーマット)

1998年のMac OS 8.1から導入されて、2020年最新のmacOS 11.0 Big Surまで読み書きできて対応範囲が広い

基本的に標準設定だと、ファイル・フォルダは大文字・小文字を区別しない。つまり、同じディレクトリに「test」「TEst」という二つのフォルダは存在できない。

Mac OS 拡張(ジャーナリング): Macの標準的なHFS+のフォーマットです。おおまかMac OS 10.2.2ぐらいから現在のMac OS 10.15まで広く対応しています。
Mac OS 拡張(ジャーナリング、暗号化):HFS+の標準的なフォーマットをしながら、ディスクを暗号化します。フォーマット後、最初にマウントする時にパスワードを求められます(キーチェーン対応なのでキーチェーンに登録すれば2回目からはいちいちパスワードを入れる必要はありません)
Mac OS 拡張(大文字/小文字を区別、ジャーナリング):ファイル名やフォルダ名の大文字小文字を区別します。たとえば、「sound folder」と「SOUND FOLDER」は別のフォルダとして認識します。大文字と小文字を区別するのでアプリによっては対応していない事があります。
Mac OS 拡張(大文字/小文字を区別、ジャーナリング、暗号化):ディスクを暗号化し、ファイル名やフォルダ名の大文字小文字を区別します。たとえば、「sound folder」と「SOUND FOLDER」は別のフォルダとして認識します。大文字と小文字を区別するのでアプリによっては対応していない事があります。
[引用] https://note.com/sound2020/n/n10c4ac2863c7

ジャーナリングとは

ジャーナリングとは予期しない停電、電源ユニットの不具合による予期せず電源が切れる不具合、強制的にMacの電源を切らざるを得ない事態などから、ボリュームのファイルシステムを保護する機能です。
ジャーナリングをオンにすると、ボリュームに保存されようとする書類の変更履歴が逐次ジャーナルに記録されます。
不具合でMacの電源が強制的に切れてしまうと、次にMacを起動するとき、ボリュームのファイルシステムに問題がないかどうかをチェックします。
このときジャーナリングがオフであると、ファイルシステム全体の整合性を確認しなければならず、修復に時間がかかります。しかしジャーナリングがオンであると、ジャーナルに記録された各々の書類の変更履歴を元に、途中だった処理のみを再実行することで、ファイルシステムの修復を最短時間で済ませます。
最終的にファイルシステムは整合性が取れている状態に戻りますが、保存途中の書類が失われた可能性はゼロではありません。つまりバックアップは必要です。
ディスクユーティリティでボリュームを消去しようとするとき、Mac OS 用のフォーマットであれば、どのフォーマットでもジャーナリングは自動的にオンになります。
[引用] https://www.too.com/support/faq/mac/others/22437.html

Mac OS 拡張 (HFS Plus) ファイルシステムのジャーナリングは、コンピュータの可用性と耐障害性を、特にサーバに関しては著しく向上させます。ジャーナリングは、不測のシステム終了や停電の際に、Xserve および Mac OS X Server を搭載したその他のコンピュータ上のファイルシステムの整合性を守ります。さらに、システムの再起動時に、障害の起きたボリュームを修復を迅速に進め、サーバおよび接続されているストレージの稼働時間を最大限に確保します。
ディスクに対してジャーナリングを有効にすると、そのディスク上のファイルへの変更が継続的にジャーナルに記録されていきます。停電や何らかの障害が起きてコンピュータが停止した場合は、サーバの再起動時に、ディスクを安定動作が確認されていた時点の状態に復元するために、このジャーナルが使われます。
障害発生時にバッファに入っていたユーザデータを失うこともあり得ますが、ファイルシステムは整合性のある状態に戻ります。さらに、コンピュータをずっと早く再起動できます。データのバックアップは、必要時に頻繁に行っておいてください。
[引用] https://support.apple.com/ja-jp/HT204435


exFAT

FAT(FAT32)の後継として作られたので、4GB以上のファイルも保存可能
MacやWindowsの起動パーティションには使えず、データ保存専用

WindowsでもMacでも使える(マスター・ブート・レコードを選択する必要あり)
Macでファイルのアクセス権が設定できない
最大ファイル文字数 : 256
大文字・小文字の区別はなし。

・一部ではデータが壊れるなどの声もあり
 これに関してはマイクロソフトがexFATの仕様を公開したのが2019年の8月らしく、ということはそれ以前からmacでexFATがフォーマットが出来るのは仕様に準じた訳ではない事になります。だって仕様が公開されていなかったんだから。。。
[引用] https://note.com/sound2020/n/n10c4ac2863c7
exFATはMicrosoftが作成したついこの前までプロプライエタリソフトウェアだったファイルシステムです。
つまり、Microsoftはついこの前まで「exFATの仕組みを非公開」にしており詳細を誰も知らなかったのです。。
........

でも、そのフォーマットしたディスクが
「Microsoftが決めた"正しいexFAT"かどうか」は誰にもわかりません
「正しい」exFATのフォーマット仕様を知っているのはMicrosoftだけです。
AppleもバッファローもLinuxもexFATのドキュメントを読んだり、exFATを勝手にハックして無理矢理読み書きできるようにしているだけなのです。
.........
補足:2019年10月にMicrosoftはexFATの技術仕様を公開しました

[引用] https://www.note.lespace.co.jp/n/n50b26ef76f88

画像22

しかし、時はもう2021年。
Microsoftによる詳細なexFAT仕様の公開が行われて1年が経ったところで、現状を再度検証してみることにしました。
今回はexFATの徹底的再検証第一弾として、2021年時点での「互換性」について検証した結果を報告したいと思います。

exFATをフォーマット&マウントした環境の 全「56通り」を調査
・Windows10(20H1)
・macOS10.7(Lion) exfat1.1
・macOS10.8(mountain lion) exfat 1.3
・macOS10.13 (High Sierra) exfat1.4
・macOS11.0(Big Sur) exfat1.4
・RHEL7.9 (exfat-fuse mkexfatfs 1.3.0)
・Ubuntu21.0 (kernel5.7 mkfs.exfat v1.1.2) *1*2
・WD MyPassPort(工場出荷まま*3)
テスト環境
読み書き確認に使ったテストファイル:DPX連番約2000枚(100GB程度)
HDDケース:Century CSS25U31C-BK-7MM
SSD:WDS100T2B0A
.......

一般的なSSDレベルの読み書き性能(300〜600MB/sec)においてですが、性能的にも各OSでわかりやすい差は発生しませんでした。次回はexFATを改めて検証の第二弾として
「exFATのファイルシステム破損がどのタイミングで生じるか」の実験結果を報告予定です。
[引用・引用画像] https://www.note.lespace.co.jp/n/n2409d70071f3


FAT16
Windows 95(4.00.950/4.00.950a)、Windows NT、Windows 3.1、DOSでも使用
1つの領域として確保できる容量は最大2047MBまで。
ファイル名は8文字まで

macOSでも利用可能。

FAT32

ファイルサイズ上限は4GBまで
1つの領域として確保できる容量は最大2TBまで。
MacやWindowsの起動パーティションには使えず、データ保存専用

Mac、Windowsで読み書きができる(「方式」で、マスター・ブート・レコードを選択する必要あり)

(MS-DOS)FAT

Mac、Windowsで読み書きができる(「方式」で、マスター・ブート・レコードを選択する必要あり)
2GB以上のファイルは使えない
最大パーティションサイズ2GB
名前は日本語等の全角文字は使えない、半角英数文字を使用すること
ファイル名は8文字まで

NTFS

Windows Xp以降の標準フォーマット
Windows Xp以降の起動パーティションに使用可能で、データ保存用パーティションにも使える
MacではOS X 10.3 Panther以降で読み出しのみ可能
最大ファイル文字数 : 256
大文字と小文字の区別はする。
 ファイル容量制限なし


UDF (Universal Disk Format)

UDFとは、CDやDVDなど光学ディスク記憶媒体向けのファイルシステムの一つ。1995年に業界団体のOSTA(Optical Storage Technology Association)が策定した規格で、その後ISOおよびIECがISO/IEC 13346として、Ecma InternationalがECMA-167として標準化した。

光学ディスク上にハードディスクなどに似た階層型ファイルシステムを設け、データをファイル単位で記録したり、ディレクトリ(フォルダ)にファイルを分類・格納することができる。特定の機種やOSなどに依存せず独立した形式となっており、様々な機器や機種、OSで同じように読み書きできる。

CD-RやCD-RWへの書き込み時に利用されたほか、DVD-ROMやDVD-R、DVD-RAMなどDVD諸規格では標準的なファイルシステムとしてよく用いられる。近年ではBD-ROMやBD-R、BE-REなどBlu-ray Discでも使われている。主要なOSのほとんどがUDF形式の読み込みや書き込みに対応している。

UDFではファイル名やディレクトリ名は特殊な形式のUnicode文字を採用しており、日本語などを使うこともできる。ファイル名は最長で254文字までとなっている。データは512バイト単位で管理され、1セクタ2048バイトの媒体で最高8TB(テラバイト)までの容量に対応することができる。セッション単位での記録方式のほか、より細かい単位で記録できるパケットライトに対応する。
[引用]  https://e-words.jp/w/UDF.html


Ext2

Ext2、Ext3、およびExt4はすべて、Linuxシステムで使用されるファイルシステムだが、 現在のほとんどのLinuxファイルシステムは、デフォルトでext4ファイルシステムを使用される。

Linuxの2番目の拡張ファイルシステム。
Extの制限を改善して、ここのファイルサイズが2TBとなった。

Extとも呼ばれる拡張ファイルシステムは、Linuxカーネル専用に開発された最初のファイルシステムであります。1992年4月に実装されたこのシステムは、MINIXファイルシステムの限界を打破することを目的としています。仮想ファイルシステム(VFS)を使用することで、Extは最大2GBのファイルシステムを扱うことができます。
しかし、Extファイルシステムには、フラグメンテーションやinodeの不変性などの欠点がありました。そこで、1993年に2番目の拡張ファイルシステム(Ext2)がリリースされました。それ以降、Ext3、Ext4というファイルシステムが次々と登場します。この3種類の拡張ファイルシステムは、Linuxのファイルシステムとして一般的に使用されています。しかし、その違いを知らない人が多いと思いますので、次に詳しく説明します。
[引用] https://www.partitionwizard.jp/partitionmanager/ext2-vs-ext3-vs-ext4.html


・個別ファイルサイズ:16GB~2TB
・ボリュームファイルシステムのサイズ:4TB~32TB
・ファイル名の最大長:255バイト(キャラクター)
・ファイルの最大数 10^18



しかし、Ext2ファイルシステムにはいくつかの欠点があります。Ext2ファイルシステムは、ストレージメディア上の同じサイズのブロックにデータを保持するように設計されているため、各ファイルでブロックサイズの平均半分が無駄になってしまいます。例えば、ブロックサイズが1024バイトの場合、1025バイトのファイルには2ブロックが必要となり、ブロックサイズの半分以上が無駄になってしまいます。
また、Ext3やExt4に比べて、Ext2にはジャーナリング機能がないため、万が一、電源が切れた場合でもデータの破損を最小限に抑えることができます。ここでは、その長所と短所を以下のようにまとめました。
[引用] https://www.partitionwizard.jp/partitionmanager/ext2-vs-ext3-vs-ext4.html




Ext3

Ext2、Ext3、およびExt4はすべて、Linuxシステムで使用されるファイルシステムだが、 現在のほとんどのLinuxファイルシステムは、デフォルトでext4ファイルシステムを使用される。

Linuxの3番目の拡張ファイルシステム。
Ext2を改善して、全ての変更のログレコードを追跡できるようになった。


Extとも呼ばれる拡張ファイルシステムは、Linuxカーネル専用に開発された最初のファイルシステムであります。1992年4月に実装されたこのシステムは、MINIXファイルシステムの限界を打破することを目的としています。仮想ファイルシステム(VFS)を使用することで、Extは最大2GBのファイルシステムを扱うことができます。
しかし、Extファイルシステムには、フラグメンテーションやinodeの不変性などの欠点がありました。そこで、1993年に2番目の拡張ファイルシステム(Ext2)がリリースされました。それ以降、Ext3、Ext4というファイルシステムが次々と登場します。この3種類の拡張ファイルシステムは、Linuxのファイルシステムとして一般的に使用されています。しかし、その違いを知らない人が多いと思いますので、次に詳しく説明します。
[引用] https://www.partitionwizard.jp/partitionmanager/ext2-vs-ext3-vs-ext4.html


・個別ファイルサイズ:16GB~2TB
・ボリュームファイルシステムのサイズ:4TB~32TB
・ファイル名の最大長:255バイト(キャラクタ)
・ファイルの最大数:可変
・ファイル名の NULL('0')と'/'を除くほぼすべての文字に対応
・3種類のジャーナリングが可能。ジャーナル、オーダード、ライトバック
・ファイルシステム変換:バックアップ・リストアなしでExt2からExt3へのファイル変換が可能
・タイムスタンプ:秒
・プレアロケート:インコア予約
・マルチブロックアロケーション:ベーシック
ある調査によると、Ext3は、Ext4やXFSなどの他のLinuxファイルシステムよりもCPUパワーの使用量が少ないという。Ext4とExt3を比較した場合、多くの専門家は、比較的シンプルでテストベースが広いことから、Ext3の方が安全であると考えています。重大なデータ破損が発生した場合、Ext2とExt3のファイルシステムは、Ext4と比較して、データの冗長性があるため、より可能性が高く、簡単にデータを回復することができます。
[引用] https://www.partitionwizard.jp/partitionmanager/ext2-vs-ext3-vs-ext4.html



Ext4

Ext2、Ext3、およびExt4はすべて、Linuxシステムで使用されるファイルシステムだが、 現在のほとんどのLinuxファイルシステムは、デフォルトでext4ファイルシステムを使用される。

Ext3との下位互換性を持つ。
・Windows(ext2fsdで読み書き可能)
・FreeBSD(バージョン12.0以降)
・macOS(ext4fuseで読み書き可能ExtFSでフル)
・KolibriOS(読み書き可能)
などいくつかの非Linux OSでもサポートされている。


Extとも呼ばれる拡張ファイルシステムは、Linuxカーネル専用に開発された最初のファイルシステムであります。1992年4月に実装されたこのシステムは、MINIXファイルシステムの限界を打破することを目的としています。仮想ファイルシステム(VFS)を使用することで、Extは最大2GBのファイルシステムを扱うことができます。
しかし、Extファイルシステムには、フラグメンテーションやinodeの不変性などの欠点がありました。そこで、1993年に2番目の拡張ファイルシステム(Ext2)がリリースされました。それ以降、Ext3、Ext4というファイルシステムが次々と登場します。この3種類の拡張ファイルシステムは、Linuxのファイルシステムとして一般的に使用されています。しかし、その違いを知らない人が多いと思いますので、次に詳しく説明します。
[引用] https://www.partitionwizard.jp/partitionmanager/ext2-vs-ext3-vs-ext4.html


・個別ファイルサイズ:16GB~16TB
・ボリュームファイルシステムのサイズ:4TB~1EB
・ファイル名の最大長:255バイト(キャラクタ)
・ファイルの最大数 40億個
・ファイル名の NULL('0')と'/'を除くほとんどの文字に対応
・ファイルシステムの変換。Ext3のファイルシステムをExt4に変換可能
・高度な機能 エクステント、ディレクトリインデックス、ディレイドアロケーション、デフラグ
・サブディレクトリー 無制限
・タイムスタンプ:ナノ秒
・プレアロケーション:エクステントファイル用
・マルチプルブロックアロケーション:アドバンスド


VFS

Virtual File System / 仮想ファイルシステム

画像27

Linuxのファイルシステムは、ベースとなる部分をUNIXのVFSによっていることを述べた。VFSは図1のように、アプリケーションと記憶装置であるメディアの間に位置する。VFSはアプリケーションからのファイル操作に関する要求を受け付け、それを関連するローカルファイルシステムごとのAPIに変換する。ローカルファイルシステムは、さらにドライバを経由して実際の記憶媒体を読み書きする
ユーザーにとっては、こうしたVFSでのAPIの変換作業は隠ぺいされているため、単に「ディレクトリ」にある「ファイル」にアクセスするというような意識で媒体のデータを操作できる。つまり、VFSはどのアプリケーションからでも、同じような手順でファイル操作(媒体へのアクセス)が行えるような、単一のインターフェイスを提供している。
[引用・引用画像]
https://atmarkit.itmedia.co.jp/ait/articles/0305/20/news002_2.html


VFSとは、ファイルシステムの上位に位置する抽象化層。ファイルシステムの仕組みのベースとなる部分は、このカーネルのVFSという抽象化された管理機構にある。
VFSの目的は様々なファイルシステムからのアクセス等々の差異を吸収する仕組みを持っている。
VFSを構成する要素として以下のようなものがある。

例えば VFS を使うと、クライアントアプリケーションはローカルな記憶装置にもネットワーク上の記憶装置にも透過的にアクセスできるため、その違いを意識する必要がない。あるいは、Windows、Mac OS、UNIXといったオペレーティングシステム (OS) の違いを超えてファイルシステムの違いを意識することなくアクセスすることが可能となる。
[引用] https://www.weblio.jp/content/%E4%BB%AE%E6%83%B3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0
・file_system_type ローカルファイルシステムを定義する構造体
・inode iノード。ファイルの管理情報を格納する。ファイル種別ごとに異なる操作管理テーブルを持つ
・super_block スーパーブロック管理用の構造体
・file ファイルのオープン状態を管理する
・dentry ディレクトリエントリ情報を管理する

inode については後述。

super_block(スーパーブロック)
1つのファイルシステムに対して1つだけ存在し、マウントされたローカルファイルシステムに対する情報を保存している。
通常、iノードは書き込みなどの状態が変化すると、その都度現在の状態を示すフラグ(bit)を更新する。この更新は、効率化のためにディスクにアクセ失せずにメモリ上に保存されているスーパーブロックに対して行われる。

これは、信頼性の面で問題がある。例えば、システムをシャットダウンせずにいきなり電源を切ってしまった場合などは、メモリ上のスーパーブロックとディスク上のスーパーブロック情報で不整合が生じる可能性がある。Linuxでは、書き込みが行われたスーパーブロックを定期的にディスクにコピーし、問題が最小限になるような方法を取っている。しかし、電源遮断時の状況によっては、fsckで回復できない致命的な障害となることもある。
ファイルシステムによっては、このスーパーブロックへの更新以外にも、メタデータの保存やトランザクションのコミットなどといった方法でメモリ上のデータとディスク上のデータとの整合性を失わないようなさまざまな試みがなされている。この方法については、今後各ファイルシステムの特徴の部分で解説する。
[引用]
https://atmarkit.itmedia.co.jp/ait/articles/0305/20/news002_2.html

dentry

ローカルファイルシステムは、システムの起動時にVFSに登録される。このときに「ext2」「ext3」といった「ファイルシステムタイプ」(file_system_type)がVFSに設定される。VFSは、この「ファイルシステムタイプ」の中に設定されている固有の命令をVFSの統一的な命令に置き換える作業を行う。例えば、open()という命令は、ext2_open_file()といったext2固有の命令に変換される。このため、VFSはトランスレータとも呼ばれる。
[引用]
https://atmarkit.itmedia.co.jp/ait/articles/0305/20/news002_2.html
Linuxで使用できるファイルシステムの実装はそれぞれファイルシステムごとに異なる。ユーザランドから統一的にファイルシステムを操作できるためのインターフェイスがVFSである。VFSによって、プログラムは個々のファイルシステムの実装の詳細を気にすることなく、VFSが持つインターフェイスのみを使用すればよい。
VFSが定義する汎用インターフェイスは、ファイルやディレクトリを処理する通常のシステムコール( open()、read()、write()、stat()等)に対応するものである。
プログラムからの書き込み要求に関しては、バッファキャッシュを使用した遅延書き込みが可能である。
[引用] https://qiita.com/tutuz/items/539d429729d5819de0aa






iノード

UNIX系のOSで使われている。
ファイルやディレクトリなどの所有者、更新日時、ファイルサイズなどの属性情報やなどを記したデータを「iノード」という。
この iノードはファイルやディレクトリに対して「iノード番号」がユニークに割り振られる。

iノードには、それぞれが実際の記録媒体であるディスク情報やブロック情報、位置情報をもっていて、

iノードの上限はカーネルによって決められており(/proc/sys/fs/inode-max参照)、file-max数の3〜4倍となっている。これは、標準入力、標準出力、ソケットの作成の際にもiノードが使用されるためである。
ファイルごとにサイズは異なるため、iノードの消費量とディスク使用量は完全には一致しない。小さいファイルを大量に作成するようなシステムでは、iノードを大量に消費する。そのため、iノードが上限に達すると、たとえディスクの使用量が少なくても、新たなファイルが生成できないという事態が生じる。
[引用] https://atmarkit.itmedia.co.jp/ait/articles/0305/20/news002_2.html

ソフトリンク、とハードリンクにも関係してくる。

UNIX系OSの一部のファイルシステムで用いられる、ファイルやディレクトリについての情報を記録した管理データのこと。

ストレージ(外部記憶装置)内の管理領域に記録されるもので、装置内に作成・保存されたファイルやディレクトリの記録位置やサイズ、作成日時や最終更新日時、最終参照日時などのタイムスタンプ、所有者のユーザーID、パーミッション(アクセス権情報)などの管理情報で構成される。

inodeは一つ一つのファイルやディレクトリごとに作成され、各inodeには装置内で固有(一意)の整数値(inode番号)が割り当てられる。ファイルやディレクトリはシステム上ではこのinode番号で識別される。

[引用] https://e-words.jp/w/inode.html
inode(アイノード)は、ext2などのUnix系ファイルシステムで古くから使われているデータ構造である。inode にはファイル、ディレクトリなどのファイルシステム上のオブジェクトに関する基本情報が格納される。
ReiserFSなどの最近のUnix系ファイルシステムでは inode を使用していないが、同等の機能を提供するには同等の情報をどこかに格納しなければならない。statシステムコールがそれらのデータをプログラム向けに提供するので、これを statデータと呼ぶことがある。
[引用] https://ja.wikipedia.org/wiki/Inode
・複数の名前が同じ inode にリンクしていると(ハードリンク)、どの名前も等価と言える。ファイルを最初に作成したときの名前は特別な意味を持たない。これはシンボリックリンクがオリジナルの名前に依存しているのと全く異なる。

・リンクを全く持たない inode もありうる。通常そのようなファイルはディスクから削除され、そのリソース(ディスクブロック)はファイル削除処理の過程で再利用のために解放されるが、何らかのプロセスがそのファイルを使用中ならば、アクセスし続けることができ、最後にクローズされるときに削除処理が行われる。このため、プログラムを改版(リコンパイル)するときは、以前の実行ファイルをまず削除して、新しい版の実行ファイルは新たな inode で作成されるようにすることが推奨される。これにより、古い版が実行中であっても何ら問題なく処理を続行することになる。(訳注:削除しないで上書きすると、実行中の実行ファイルが書き換えられるため、メモリ管理の実装によってはおかしな状態が発生する)。
[引用] https://ja.wikipedia.org/wiki/Inode

画像65

ディスク上では、以下のように格納される。※ext2の構造はブロックグループごとに分かれており、もう少し複雑になっている。

ブートブロック・・・OSを起動する情報を保存する。すべてのファイルシステムでブートブロック用に空きスペースとなっている。常に先頭に位置する。
スーパブロック・・・ブートブロックの直後に位置する1ブロックの領域である。「i-nodeテーブルサイズ」「論理ブロックサイズ」「論理ブロック数」を保存する。
i-nodeテーブル・・・ファイルシステム内のすべてのディレクトリ、ファイルはi-nodeテーブル内で1エントリを占めている。
データブロック・・・ファイルシステムの大半を占めるブロックで、ファイル、ディレクトリを構成する情報を保存する。
[引用・引用画像] https://qiita.com/tutuz/items/539d429729d5819de0aa

i-nodeはファイルシステムにおけるデータ構造であり、1ファイル・ディレクトリごとにi-node tableの1エントリが使用される。

i-nodeで管理されるもの。

・ファイルの種類
・オーナ(UID)
・グループ(GID)
・パーミッション
・タイムスタンプ(ファイルに最後にアクセスした時刻/ファイルを最後に変更した時刻/ファイルの属性を最後に変更したした時刻)
・ハードリンクカウント
・バイト単位のファイルサイズ
・ファイルに割り当てたブロック数
・ファイルデータを保存したデータブロックへのポインタ

画像66

画像67

i-nodeでは、i-node内に保持しているデータブロックへのポインタによって、ファイルデータを持つデータブロックを特定する。この構造によってファイルは連続したブロックを保持する必要がなく、ディスクを効率良く使用することができる。同時にi-nodeサイズの固定化、複数のデータブロックにまたがる巨大ファイルサイズのファイルの格納が可能、小さなサイズファイルのファイルに対して低レイテンシでアクセス可能になった。
[引用・引用画像] https://qiita.com/tutuz/items/539d429729d5819de0aa



現在のi-node領域の使用状況を確認するためには、dfコマンド(オプションi)を使う。

# df -i
Filesystem  Inodes   IUsed   IFree IUse% マウント位置
/dev/sda2   363600   85013  278587   24% /
tmpfs       127561       5  127556    1% /dev/shm
/dev/sda1   128016      44  127972    1% /boot
/dev/sdb1     4016      12    4004    1% /mnt/sdb1
Inodes そのデバイスで作成できる、inodeの限界値
IUsed 現在のinode 使用量
IFree 残り作成できるinode数
IUse% inodeの使用率(%)

ファイル・ディレクトリのi-node番号の確認の仕方は、
ls -iで確認できる。

$ ls -li
合計 0
5740 -rw-rw-r--. 1 user1 group1 0  914 16:57 2013 test0.txt ← inode番号は、 5740
15118 -rw-rw-r--. 1 user1 group1 0  914 16:57 2013 test1.txt ← inode番号は、15118
15123 -rw-rw-r--. 1 user1 group1 0  914 16:57 2013 test2.txt ← inode番号は、15123





RAID

redundant array of independent disks

概念としては、LVM(logical volume manager)と似ているが異なる概念。

RAIDは以下の3つの目的とした技術。

・複数のディスクを束ねて1本の大きなディスクとして扱う
・冗長化による耐障害性の向上
・read/write の分散による処理速度の向上

RAIDがディスクを直接束ねるのに対し、LVMはパーティションを束ねている。束ねたパーティションはボリュームグループと呼ばれ、ボリュームグループから論理ボリュームを作成することができる。

またLVMとしての違いとして、誤り訂正、冗長性などの耐障害性に対しても管理している点が異なってくる。

RAID は 1987年、カリフォルニア大学バークレー校の Patterson、Gibson、Katz の3人が発表した論文「 A Case for Redundant Arrays of Inexpensive Disks (RAID)」で初めて登場しました。
この論文は、メインフレームで一般的に使用されていた大容量ディスクドライブ の代わりに、低容量・低価格、そして比較的信頼性の低いディスクドライブを使用する方法について語られていたもので、RAID1~RAID5 がこの論文で既に定義されていました。
[引用] https://turningp.jp/server-client/linux/lvm
例えば 100GB のディスクが3本あり、それぞれパーティションが 50GB×2 用意されていたとします。各ディスクからパーティションを1つずつボリュームグルプに追加すると、150GB のボリュームグループが作成されます。それをそのまま論理ボリュームにすると150GB です。つまり本来のディスク容量以上のパーティションを作成することが可能です。この辺りの機能は RAID と重なっている部分があります。
LVM の一番の特徴は論理ボリュームの容量をリサイズできることでしょう。ここが明確に RAID と異なる点です。
[引用] https://turningp.jp/server-client/linux/lvm
RAIDとLVMがごちゃごちゃです.両方を同時に使うこともありますが,とりあえず別物と思ってください.RAIDとLVMは複数のディスク(パーティション)を1つに見せるという点で同じですが,LVMは単純に連結するだけです.結果,500GBx4=2TBになります.RAIDはレベルによってミラーしたり,ストライピングしたり,誤り訂正パリティを持ったりします.詳細は以下に譲ります
[引用]
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1230959207


ハードウェアRAID・ソフトウェアRAID

RAIDの機能、複数のディスクを1台に見せるための管理等々をハードウェアとソフトウェアのどちらで行うかというので2種存在する。

画像71

[引用画像] https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/beginner/raid-type/

ハードウェアRAIDはRAIDコントローラーのような専門ハードウェアに複数のディスクを接続する。コンピュータ本体にRAIDコントローラを内蔵するパターンと、コンピュータとは通常のSCSI(スカジー)インターフェースで接続し、専用の外部ディスク装置として使うディスク・アレイ装置を利用するパターンが存在する。

ソフトウェアRAIDはRAIDソフトと呼ばれる、OSや特定のソフトウェアが複数のディスクをまとめて管理する。

ソフトウエアRAIDは専用のハードウエアを必要としないため,ハードウエアRAIDに比べて安価です。Windowsをはじめとする最近のOSでは,RAID機能を標準で搭載しているものが一般的です。このため,複数のハードディスクを接続して設定すれば簡単にRAIDが実現できます。
ただし,ソフトウエアRAIDの性能は,CPUに依存します。RAIDの管理をCPUで処理するため,CPUへの負荷が高まってシステム全体の処理が遅くなることがあります。また,OS起動後にしか有効にならないため,OSの起動ドライブには設定できないなどの制限があります。なお,最近の高速なCPUを使用した場合,ソフトウエアRAIDの性能がハードウエアRAIDをしのぐこともあるようです。

一方のハードウエアRAIDは,システムからは単体のディスクにしか見えません。このため,OSそのものを格納することができます。OSやアプリケーションの設定を変える必要はありません。
多くのRAIDは,障害が発生してもシステムをそのまま運用し続けることができます。また,障害が発生したディスクだけを正常なものに取り替えれば,元通りに復旧することができます。これらの一連の処理が,ソフトウエアRAIDではCPUの負担となってしまうのに対し,ハードウエアRAIDではコントローラが処理するのでCPUに負荷がかかりません。
[引用] https://xtech.nikkei.com/it/article/COLUMN/20060712/243118/
ソフトウェアRAID
SCSIインターフェースなどを通して、コンピュータに接続されている複数のハードディスクを、ひとつに見せかける機能を持つソフトウェア(RAIDソフトと呼ばれる)をコンピュータ上で実行させるものです。
Windows NT/2000のソフトウェアRAIDなどが一般的です。
ハードウェアRAID
サーバのCPUとは独立した制御部分が、RAID処理を実行します。
大きく分けて、コンピュータ内のPCIバスに接続するカードタイプと、ディスクドライブと一体化され、ファイバチャネルやSCSIなどの方式で接続するタイプがあります。
本格的なサーバシステムでは、サーバのCPUに余分な負荷のかからない、ハードウェアRAIDコントローラーを用いるのが一般的です。
[引用] https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/beginner/raid-type/


RAIDグループ

複数のディスクをRAIDコントローラと呼ばれるものによって、ディスクを束ねて新たな仮想的なディスクを作くれる。このディスクとRAIDコントローラをRAIDグループと呼ぶ。

画像68

[引用画像]
https://milestone-of-se.nesuke.com/sv-basic/architecture/disk-term/


RAID レベル

RAIDレベルによって、効能や特性が変わってくる。何のデータを保存しておきたいか、どの様な運用をしたいかによって選択する必要がある。

RAIDレベルの説明:
RAID 0:複数のディスクに均等にデータを振り分け、同時並行で記録することで、データの読み書きを高速化する複数のディスクに均等にデータを振り分け、同時並行で記録することで、データの読み書きを高速化する
RAID 1:2台のディスクにまったく同じデータを同時に書き込む2台のディスクにまったく同じデータを同時に書き込む
RAID 2:ハミングコードと呼ばれる誤り訂正符号を生成し、データとともに分散して記録するハミングコードと呼ばれる誤り訂正符号を生成し、データとともに分散して記録する
RAID 3:複数あるディスクのうち1台を、パリティと呼ばれる誤り訂正符号の記録に割り当て、ほかのディスクにデータを分散して記録する(データ分散をビット単位で可能)複数あるディスクのうち1台を、パリティと呼ばれる誤り訂正符号の記録に割り当て、ほかのディスクにデータを分散して記録する(データ分散をビット単位で可能)
RAID 4:複数あるディスクのうち1台を、パリティと呼ばれる誤り訂正符号の記録に割り当て、ほかのディスクにデータを分散して記録する(データ分散をブロック単位で可能)複数あるディスクのうち1台を、パリティと呼ばれる誤り訂正符号の記録に割り当て、ほかのディスクにデータを分散して記録する(データ分散をブロック単位で可能)
RAID 5:データからパリティと呼ばれる誤り訂正符号を生成し、データとともに分散して記録する方式:データからパリティと呼ばれる誤り訂正符号を生成し、データとともに分散して記録する方式
引用 : https://www.itmedia.co.jp/im/articles/0511/22/news116.html
RAIDには、ハードディスクへのデータの割り振り方やデータの冗長化の方法によって、8つのレベルに分類定義されています。
ここでは、一般的に使われている8つのRAIDレベルを紹介します。

RAID0
「ストライピング処理」により複数のディスクに分散してデータを記録
RAID1
「ミラーリング」によりデータを2台のディスクに同時に書き込む
RAID 1+0
RAID1によるデータ二重化と、RAID0の高速化を合わせて実現
RAID4
RAID 0 のストライピングに、パリティ専用ディスクを追加してデータを再生成
RAID5
パリティデータをすべてのディスクに分散・配置してRAID4のボトルネックを回避
RAID 5+0
RAID 5を複数グループ用意し、RAID 0のストライピング処理によりデータを記録
RAID6
ダブルパリティにより、同一のRAIDグループ内の2台のディスク故障までを救済
RAID-DP(RAID6)
RAID4グループにさらに対角線のグループを見るパリティドライブを追加することで2台のディスク故障までを救済
[引用] https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/beginner/raid/index.html



ストレージプール

大容量ストレージ用のRAIDコントローラは、1つのRAIDグループに参加させるHDDの数に推奨本数などの制限があることもある。
だが、大容量のボリュームを作成したいときは、ストレージ製品によってストレージプールというのものが利用できる。
ストレージプールは、
物理ディスクや、同じRAIDレベルのRAIDグループを連結して1つの大容量ボリュームとして見せることができる。

画像69

[引用画像]
https://milestone-of-se.nesuke.com/sv-basic/architecture/disk-term/


LUN
Logical Unit Number


画像70

LUN (読み方:えるゆーえぬorるん) とは、「SCSI コマンド」というディスクドライブ接続インタフェース規格の論理層で使われる、ディスクの論理識別番号です。
SCSI 規格は「物理層 (コネクタやケーブル)」と「論理層 (電気信号の解釈 = SCSI コマンド)」がセットで定められていますが、このセットのものは今は使われていません。
SCSI 規格に替わるものとして今の主流は SAS や SATA、USB、ファイバチャネル、Ethernet (FCoE や iSCSI) が使われていますが、これらの論理層は今も変わらず SCSI コマンドが使われています。
初期の SCSI は SCSI ID が 0 ~ 7 までしか値が取れず、さらに 7 はホストバスアダプタ (HBA) に予約されているため、SCSI デバイスは 7 つまでしか接続できませんでした (初期 SCSI は数珠繋ぎ接続)。この制約を拡張するため、LUN が作られました。LUN では 1 つの SCSI-ID につき 8 つのユニットを作れるため、7*8 = 56 台の SCSI デバイスを接続できるようになりました。
[引用・引用画像]
https://milestone-of-se.nesuke.com/sv-basic/architecture/disk-term/



APFSコンテナ

Apple File System Container

APFSのファイルシステムでは、物理HDD/SSDの直下にコンテナと呼ばれるもの作られる。その下にボリュームが存在するということとなる。ただ。少し既存のファイルシステム とは感覚が異なってくる。

ディスクユーティリティでディスクを確認できる

画像45

画像44


MacOSではHFS+と呼ばれるファイルシステムが使われていたが、2017年に新しくMacOS High SierraからAPFSが標準的に使われるようになった。

HFS+とAPFSでは大きく構造が異なっている。
HFS+ではボリュームの管理やディスク暗号化機能「FileValut2」を利用するためにCoreStorageというシステムを搭載していた。このCoreStorageはMac OS X Lionから搭載された。
CoreStorageとはApple社が導入したLVMの一種

FileVault(フルディスク暗号化)とFusion Driveテクノロジーを基盤に開発されています。一言で言うなら、Core Storageとは、ディスクパーティションスキームとファイルシステムの間にある階層です。Core Storageは、1つ以上の物理ボリューム(PV)を論理ボリュームグループ(LVG)に含め、1つ以上の論理ボリューム(LV)を常駐可能になることで動作します。
通常、PVはSSD(ソリッドステートドライブ)またや従来のHDD(ハードディスクドライブ)といったリアルなストレージデバイスですが、ディスクイメージやRAID設定になる場合もあります。PVは、常に固有のGUID付きのGPT(GUID、パーティション表)ディスク上で、パーティションとなっています(53746F72-6167-11AA-AA11-00306543ECAC)。物理ボリュームからのデータは標準ファイルシステムを持っていないため、直接再取得不可という点に注意する必要があります。
物理ボリュームグループは1つ以上の論理ボリュームを含む場合がありますが、標準設定では1つのボリュームに全物理ボリュームの容量を完全に含みます。これは標準ファイルシステム(HFS+など)をホストするLVで、全データが従来の方式でまとめられているため、完全にアクセス、読み取り可能です。
[引用] https://kb.paragon-software.com/article/5592

画像46

そしてYosemiteでは、Core Storageがデフォルトになった。これは何を意味するかというと、Yosemiteにアップグレードしたとき、システムボリュームがCore Storageでフォーマットされているということだ。試しに、Terminalで「diskutil list /dev/disk0」と実行し、システムボリュームの詳細情報を表示してみよう。Mavericksまでは「Apple_HFS」と表示されていたパーティション(通常は「disk0s2」)が「Apple_CoreStorage」に変わっているはずだ。
[引用・引用画像] https://news.mynavi.jp/article/osxhack-129/
Core Storage is a logical volume management system on macOS that was introduced by Apple to Mac OS X Lion. Core Storage is a layer between the disk partition and the file system.[1]
Core Storage is the basis for Apple's Fusion Drive technology,[2] which presents several partitions on multiple drives as a single logical volume. It does this by using tiered storage, whereby it keeps the most frequently used blocks on the fastest storage device in the pool, which is, by default, an SSD.
[引用] https://en.wikipedia.org/wiki/Core_Storage


APFSも、LVMの一種でボリュームを管理する機能の一つ
APFSではCoreStorageが撤廃されて、新しくAPFS Containerというシステムが搭載された。

ディスクユーティリティを開いて、実際見てみる方が理解しやすい。

まず、APFSでディスクユーティリティよりフォーマットを行うと、コンテナというものが生成されて、その直下にボリュームが存在するようになる

画像51

[引用画像] https://original-game.com/what-is-apfs/

このAPFSコンテナに対して、「パーティションを作成」以下の様なポップアップがでてくる。

画像52

Apple File Systemの領域共有
APFSボリュームではコンテナ内でストレージ領域が共有されます。APFSボリュームの追加や削除は、パーティションマップを編集するよりも簡単かつ高速に実行できます。
このメッセージを表示せずに新規ボリュームをコンテナに追加する場合は、“編集”メニューの“APFSボリュームを追加”コマンドを使用するか、ツールバーの“ボリュームを追加/削除”ボタンを使用します。
ボリュームをコンテナに追加しますか? またはデバイスにパーティションを作成しますか?

従来のパーティションの感覚とは異なり、パーティションを追加を行うとコンテナが新しく追加されてその下にボリュームが新しく作られる。

画像55

[引用画像] https://original-game.com/what-is-apfs/


またボリュームを作成(+-ボタン)を押すと、コンテナ内に、ボリュームが作成される。

画像54

画像55

従来のファイルシシテムでは「パーティションを作成」すると、ファイルシステムを選び、そのファイルシステムのボリュームが作成されていたが、
APFSではコンテナが作成される。APFSコンテナ内のボリュームは仮想的な論理ボリュームとなっていて、コンテナの容量をボリューム同士が共有して管理される。

つまり、APFSはLVMの概念が採用されているため、従来のHFS+の様なファイルシステムとは異なってくる。

画像56

画像58

画像59

上述しましたが、APFSでは、ひとつのパーティションに複数のボリュームを作ることができます。
さらに、そのパーティションの中のボリューム同士は、空き容量が共有されます。
つまりこの、パワーアップしたパーティションが、コンテナです。
パーティション:記憶領域を区切ったもの
コンテナ:APFSで使われる、パワーアップしたパーティションのこと
ボリューム:各パーティション(コンテナ)に作られた、ファイルシステム領域。ひとつのコンテナに複数のボリュームを作成することも可能
[引用・引用画像] https://original-game.com/what-is-apfs/

画像57




画像50

[引用画像] https://datarescue.yamafd.com/apfs_merit_demerit/

画像49

High SierraのTerminal(コマンド:diskutil list)
画像を見ても分かる通り、APFSではCoreStorageが撤廃され、新しく【APFS Container】というシステムが導入されました。こちらもdisk1として再マウントされていますが、CoreStorageのように論理ボリュームで行われるのではく、Containerとしてマウントされています。これにより、保全を行う際、従来のHFS+のようにAPFSのContainerだけを保全してしまうと、展開に必要なデータを省いて保全してしまうため解析が出来なくなってしまいます。そのため、APFSの保全を行い場合は、論理ボリュームではなく、物理ディスク全体(disk0)の保全を行うようにしてください。
[引用・引用画像]
 https://cyberforensic.focus-s.com/knowledge/articles_detail/356/



画像47

既存ファイルシステムでコピーを行なった場合のデータの動き

画像48

High Sierra(APFS)でコピーした場合のデータの動き
Copy-on-Write
APFSで新たに搭載された機能になりますが、この概念自体は全く新しいものではありません。元々はソフトウェアのプログラミングなどで使われていましたが、最近はファイルシステムに適用されるようになってきました。
この技術の根底にある考え方は非常に簡単です。ユーザーがファイルのコピーを作成する場合、2つのファイルが作成される必要はありません。代わりに、2つの異なる場所からリンクされた1つのファイルを作成するだけです。こうする事によって、実際のストレージにはコピーが1つしか作成されず、ビット毎に全く同じデータを書き込み時間も短くなります。実際のコピーを行うタイミングは、オリジナルまたはコピーしたアイテムが更新されたタイミングとなります。
もし、HFS+などのCopy-on-Write方式を使っていないファイルシステムでコピーを行った場合、ファイルシステムはこの画像ファイルのコピーを別セクタに作成します。これは、ストレージにコピーが完了するための領域と時間の両方が必要になります。実際に容量の大きいものをコピーする場合、相応の時間がかかるのは皆さんも経験したことがあるかと思います。
Copy-on-Writeの場合、ユーザーに別々の画像ファイルとして表示されますが、裏ではストレージセクタ上の同じファイルを参照しています。これにより、データ領域を無駄に使用しない且つ高速なコピーを可能にしています。
[引用・引用画像]
  https://cyberforensic.focus-s.com/knowledge/articles_detail/356/


APFSはSSDでのパフォーマンスや安全性などを優先した結果,データが断片化しやすい設計になっていると言える. そのためHDDのように機械的なシークで時間を消費してしまうようなディスクでは,たとえ僅かなシーク時間でも,チリも積もって山となり,結果としてパフォーマンスがかなり悪くなる(はず). HDDもAPFSにフォーマットできるが,特にメリットは無いのでおすすめしない. APFSはSSDに特化したフォーマットと言える.
[引用] https://www.storange.jp/2018/03/apfs.html



macOS標準起動APFSコンテナーのいくつかの例は以下の通りです。
Preboot - macOS High Sierraのアップデートで行われるブートを管理するボリュームとして知られています。これは、Macintosh HDのブートプロセスをサポートするためのもので、通常は非表示になっています。
VMまたは仮想マシン - これは、スワップファイルやスリープイメージなど、RAMで実行するには少し大きいファイルとして保存できるように、RAMを補足するボリュームです。 これが、仮想マシンがMac上のストレージスペースの大部分を占めている理由です。
Recovery - これはMacのリカバリーシステムがあるボリュームです。起動中にCMD + Rキーを押すと実行できます。
Macintosh HD - これがmacOSシステムのボリュームがインストールされている場所です。 これは、ディスクユーティリティに表示され、Macintosh HDと名前をつけたものです。
[引用]
https://www.fonedog.jp/clean-up-mac/other-volumes-in-container.html






ストレージの確認


以下のサイトでの説明が分かりやすかったので貼っておきます。


Mac OSでのストレージの確認方法は大きく5つ

・ディスクユーティリティ
・左上リンゴマーク > このMacについて > ストレージ
・Finder > Macintosh HD(サイドバー)
・ターミナル > df -h
・ターミナル > sudo du -sh /*
・ターミナル > diskutil list


ディスクユーティリティ

ディスクユーティリティ.appというアプリケーションが標準搭載されている。

スクリーンショット 2021-06-20 21.57.13


左上リンゴマーク > このMacについて > ストレージ

スクリーンショット 2021-06-20 22.20.01


Finder > Macintosh HD(サイドバー)

Finder上でMacintosh HDが左側のサイドバーに表示されている場合は、右クリック情報を見る又は、Command + i でショートカットになる。


画像8

スクリーンショット 2021-06-20 22.26.14

以下のような情報が出てきて、フォーマットや容量、空き容量などを確認することができる。

スクリーンショット 2021-06-20 22.25.07



dfコマンド

以下のサイトでの説明が分かりやすかったので貼っておきます。


ディスク容量をただ確認するだけなら、以下のコマンドで十分。

$ df

画像12

引用画像 : https://eng-entrance.com/linux-command-df

画像13

引用画像 : https://www.atmarkit.co.jp/ait/articles/1610/24/news017.html

表示項目は

Filesystem
Filesystemどのディスクを表示しているかを示している。
ファイルシステム名(ディスク名)
1K-blocks
ディスクサイズ(使用可能なディスク容量)
Used
ディスク使用量(使用済みディスク容量)
Available
使用可能量(ディスク空き容量)
Use%
使用率
Mounted on
マウントポイント(ディレクトリ名)
dfコマンドの主なオプション
短いオプション 長いオプション 意味

-h --human-readable
サイズに応じて読みやすい単位で表示する
-H --si
読みやすい単位で表示する。ただし、1024単位ではなく、1000単位の値を使用する
-Bサイズ --block-size=サイズ
指定したサイズの倍数で表示する。サイズは数値または単位で指定する
-k
 --block-size=1Kと同じ
-m
 --block-size=1Mと同じ
-P --portability
POSIX出力形式(サイズではなくブロックで表示)
-i --inodes
ブロック使用量の代わりにiノード情報を表示する
-T --print-type
各ファイルシステムの種類を合わせて表示する
-t種類 --type=種類
対象とするフォーマットの種類を指定する(例えば「-txfs」でXFSフォーマットの場所だけを表示)
-x種類 --exclude-type=種類
対象としないフォーマットの種類を指定する(例えば「-xtmpfs」で種類が「TYPE」ではないファイルシステムのみ表示する)
-a --all
ダミーファイルシステムを含めて表示する
-l --local
ローカルファイルシステムのみを表示する
--total
全体の合計も表示する
--sync
使用量の情報を得る前にsyncを実行する
--no-sync
使用量の情報を得る前にsyncを行わない(デフォルト)

引用 : https://www.atmarkit.co.jp/ait/articles/1610/24/news017.html



duコマンド

$ sudo du -sh /*

ターミナルでの確認にでduコマンドを使うと、ルートから5階層下までのフォルダの容量を確認し、容量が5GB以上のフォルダがリストアップされる (出力結果の数字は各フォルダの容量 (単位:GB))。

つまりディレクトリ(フォルダ)単位での容量を確認することができる。

duコマンドのオプション
-x
別のファイルシステムのディレクトリは除外する
-b
B(バイト)単位で表示する
-k
KB単位で表示する
-m
MB単位で表示する
-g
GB単位で表示する
-h
大きさに応じてMB単位だったり、KB単位だったり、人間にとって読みやすい単位で表示する
-s
サブディレクトリをたどってそれぞれを表示するのではなく、引数に与えられた ディレクトリの容量合計のみを表示する
-c
トータルの容量も最後に表示する
-d
ディレクトリのすべてのファイルとディレクトリのエントリを表示する

引用 : https://qiita.com/twipg/items/4cf763aa0a09ca1e387f


diskutil list

「diskutil」コマンドは、ディスクの消去や、パーテーションの分割など「ディスクボリューム」の管理を行うコマンド。
GUIを持つMacOS標準のディスク管理ツール「ディスクユーティリティ」で同じ操作が可能。

書式
diskutil コマンド ボリューム・・・・・
コマンド

list 指定したボリュームのパーテーション一覧を表示。ボリュームを省略すると、マウントしているボリュームが対象となる。
info 指定したボリュームの状態を表示。
unmount ボリュームをアンマウントする。
unmountDisk ディスクをアンマウントする。
eject ディスクをアンマウントして取り出す。
mount ボリュームをマウントする。
mountDisk ディスク全体をマウントする。
rename ディスクのラベル名を変更する。
enableJournal ジャーナル機能を有効に為る。
disableJournal ジャーナル機能を無効にする。
verifyDisk ディスクの論理構造を検証する。
repairDisk ディスクの論理構造を検証し、問題を修復する。
VerifyPermissions ファイルシステムのアクセス権を検証する。
repairPermissions ファイルシステムのアクセス権を検証し、問題を修復する。
eraseDisk ディスク全体を消去する。パーテーション情報も消去される。
eraseVolume ボリュームを消去する。「hfs+」などフォーマットもできる。
eraseOptical 「CD-R/RW」などの光磁気メディアを消去する。
reformat ファイルシステムやボリューム名を維持したままフォーマットする。
resizeVolume パーテーションのサイズを変更する。「intel Mac」でのみ利用可能。
partitionDisk ディスクのパーテーション情報を削除して、新しいパーテーション情報を作成する。
createRAID ソフトウェアRAIDを作成する。
destroyRAID 既存のRAIDセットを解除する。
checkRAID RAIDセットを検証する。
repairMirror ミラーリングが有効なときに、エラーを修復する。
[引用]
https://renoji.com/IT.php?Contents=Program_ShellScript_Bash/Cmd_diskutil.html




パージ可能領域

環境によっては、「上リンゴマーク > このMacについて > ストレージ」の表示と、「ディスクユーティリティ」上での表示に差がある。

どっちが正しい表示なのか、一見して分かりにくい表示となっている。

画像10

画像11

引用画像 : https://lmn-blog.com/mac04/

ただ、よく見てみるとストレージの表示の空き領域は

ディスクユーティリティ上で青いバーや、利用可能の項目で(〇〇GBパージ可能)と表記されている場合がある。

この利用可能領域とパージ可能領域、空き領域は何が違うのだろうか。

パージ領域はmacOS Sierraから表示されるようになった項目で、
パージ可能領域とは、削除しても問題ないファイルが集まっている領域を表している。
空き容量が必要になったとにはファイルを自動で削除し、領域を開放することとなっている。
具体的にファイルの内容としては、ローカルスナップショットやシステムキャッシュ、重複したファイルなどとなっている。

空き領域とは純粋に空いている領域を表している。
つまり利用可能領域からパージ領域を引いた値の領域が、空き領域として表示されているものとなる。

利用可能領域 - パージ領域 = 空き領域


上記ででてきた、ローカルスナップショットとは、
MacOS本体に作成される呼びバックアップ的な存在である。

つまり、Timemachineなどでバックアップを新規に作成すると、ローカルスナップショットなどの容量がなくなり、パージ領域が解放される。

Appleの公式サイト内(Time Machine のローカルスナップショットについて)によると、「バックアップを自動作成」の選択を解除するか、「切/入」スイッチをクリックするだけでも、数分経てばローカルスナップショットは削除されるそうです。
[引用] https://lmn-blog.com/mac04/



ターミナルにおける権限変更 chmod

ファイルやディレクトリに対して権限の設定が行われている。

ターミナルでは例えば、ls- la等々で確認することができる。
「drwxr-xr-x」などの最初の部分が各ファイル等々の権限(パーミッション)を表している。
最初の一文字目 -, d, l はファイルの種類を表し、ファイル、ディレクトリ、シンボリックリンクを表す。
その次の3文字単位で、順に所有者、グループ、そのほかのユーザーの権限を表す。
rが書いている場合は、読み込み許可、wの場合は書き込み許可、xの場合は実行許可、-の場合は許可なしの権限がそのユーザーに与えられていることを表す。

ls -l
drwxr-xr-x 2 Macuser staff 68 1 23 15:23 Sample
-rw-r--r-- 1 Macuser staff 7 1 23 15:24 Sample.txt

画像60

[引用・引用画像] https://do-zan.com/mac-terminal-chmod/


chmod コマンドで、+を使えば権限の追加、-で権限の削除を行える。

chmod go+w Sample
chmod a+x Sample.txt
ls -l
drwxrwxrwx 2 Macuser staff 68 1 23 15:23 Sample
-rwxr-xr-x 1 Macuser staff 7 1 23 15:24 Sample.txt
chmod a-wx Sample
chmod go-x Sample.txt
ls -l
dr--r--r-- 2 Macuser staff 68 1 23 15:23 Sample
-rwxr--r-- 1 Macuser staff 7 1 23 15:24 Sample.txt

「ユーザー=権限」で 権限をまとめて変更することもできる。
「=」後になにも書かない場合は、不許可になる。

chmod u=wx,g=,o= Sample
chmod u=rwx,g=rwx,o=rwx Sample.txt
ls -l
d-wx------ 2 Macuser staff 68 1 23 15:23 Sample
-rwxrwxrwx 1 Macuser staff 7 1 23 15:24 Sample.txt

また、数値を使った権限変更として、
rは4, wは2, xは1, 不許可には0を表しているとしてその合計を入力することで権限を表す方式で変更することができる。
rwxを全て許可したい場合は7
rxのみを許可したい場合は5で表す。

chmod 600 Sample
chmod 755 Sample.txt
ls -l
drw------- 2 Macuser staff 68 1 23 15:23 Sample
-rwxr-xr-x 1 Macuser staff 7 1 23 15:24 Sample.txt


-Rで対象がフォルダの時はフォルダ内の全てのファイル・フォルダに対して再起的にパーミッションの変更を行うことができる。

chmod -R 777 Sample


スティッキービット

上記の通り、ファイルの削除はファイルのパーミッションに関わらず、ディレクトリのパーミッションが参照されます。
しかし、スティッキービットを指定したディレクトリに関しては、
ファイルの削除がファイルの所有者のみに制限されます。
drwxrwxrwt
スティッキービットが設定されているディレクトリは、
ファイルリスト取得時、上記の通り末尾に t が付与されます。
[引用] https://qiita.com/tomoyuki_okawa/items/e4444e727946b956e1ee

スティッキービットは +t か 1000で

chmod +t T_tuki
# drwxrwxrwt 1 oba3 oba3  512 Dec 12 17:33 T_tuki/

chmod 1000 T_tuki
# d--------T 1 oba3 oba3  512 Dec 12 17:33 T_tuki/

chmod 1775 T_tuki
# drwxrwxr-T 1 oba3 oba3  512 Dec 12 17:33 T_tuki/

chmod 1777 T_tuki
# drwxrwxrwt 1 oba3 oba3  512 Dec 12 17:33 T_tuki/
スティッキビットありなし時のディレクトリ内ファイル削除の比較例
id
# uid=1791(oji3) ~
# 現在ユーザーは oji3

chmod +t T_tuki
# スティッキビットをディレクトリ権限に付与

ls -l
# drwxrwxrwt 1 oba3 oba3  512 Dec 12 17:33 T_tuki/
# drwxrwxrwx 1 oba3 oba3  512 Dec 12 17:33 t_nasi/

ls -l -R T_tuki t_nasi
# T_tuki:
# total 0
# drwxrwxrwt 1 oba3 oba3 512 Dec 12 17:33 ./
# drwxr-xr-x 1 oba3 oba3 512 Dec 12 17:28 ../
# -rwxrwxrwx 1 oba3 oba3   0 Dec 12 17:31 kesenai*
# 
# t_nasi:
# total 0
# drwxrwxrwx 1 oba3 oba3 512 Dec 12 17:33 ./
# drwxr-xr-x 1 oba3 oba3 512 Dec 12 17:28 ../
# -rwx------ 1 oba3 oba3   0 Dec 12 17:31 keseru*

rm T_tuki/kesenai; ls -l T_tuki
# rm: cannot remove 'T_tuki/kesenai': Operation not permitted
# total 0
# drwxrwxrwt 1 oba3 oba3 512 Dec 12 17:33 ./
# drwxr-xr-x 1 oba3 oba3 512 Dec 12 17:28 ../
# -rwxrwxrwx 1 oba3 oba3   0 Dec 12 17:31 kesenai*

rm t_nasi/keseru; ls -l t_nasi
# total 0
# drwxrwxrwx 1 oba3 oba3 512 Dec 12 17:33 ./
# drwxr-xr-x 1 oba3 oba3 512 Dec 12 17:28 ../

# ----------------------------------------------------------------------

# T_tuki/kesenai はディレクトリ権限が 1777 で、スティッキビットがディレクトリに設定されているため、中のファイルが(ファイル所有者が oji3 でなければ)削除できない。
# t_nasi/keseru はディレクトリ権限が 777 のため、中のファイル所有者が oba3 で ファイル権限が 700 でもファイル削除できる。





リンク・ショートカット・エイリアス・ソフトリンク


OSのファイルシステムの機能の一つ。


ソフトリンク(Soft link)

ソフトリンク (Soft Link) は、コンピュータのディスク上で扱うファイルやディレクトリを、本来の位置にファイルを残しつつそれとは別の場所に置いたり別名を付けてアクセスする手段である複製とは違い、実体がないこと、ソフトリンクで開いたファイルへの操作が実物のファイルにも反映されること、ファイルサイズが小さいのが特徴。

ソフトリンクはリンク先のファイルを指し示しているだけの存在であるが、これへアクセスするとリンク先のファイルが操作される。つまり、ディスク内のある場所にあるファイルを、あたかも別の場所にもあるがごとく扱えるのである。これは、ファイルを整理した際に、ディレクトリの奥深くに埋もれてしまったファイルをデスクトップなど手近な場所からアクセスするのに便利になる。

ソフトリンクは、リンクを削除してもオリジナルは消滅しない。逆に、オリジナルを削除するとソフトリンクは無効なものになってしまう。

[引用]
https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%83%AA%E3%83%B3%E3%82%AF

ソフトリンクの機能は各種OSで名称が異なっている。

・Windows系では「ショートカット
・macOS系では「エイリアス
・UNIX系OSでは「シンボリックリンク
・NTFSを搭載したWindows(Windows XP等)では「ジャンクション

かなり名称としてややこしいのだが、
macOSには「エイリアス」に加えて、「シンボリックリンク」という機能
Windows Vista以降は「ジャンクション」に加えて、「シンボリックリンク」という機能があり、
同じ名称が使われているがそれぞれ仕様が異なるため詳細を確認する必要がある。


ハードリンク(Hard link)

ハードリンクは、コンピュータのファイルシステム上のファイルやディレクトリ等の資源とその資源につけられた名前を結びつけること、もしくは、その結びつきのことである。

名前によってアクセスできるファイルは少なくともひとつのハードリンクを持っている。ファイルは複数のハードリンクを持つこともある。この場合、そのファイルは複数の異なった名前でアクセスできる。UNIXを例に言えば、すべてのファイル、ディレクトリにはinodeと呼ばれる固有のIDが割り当てられている。ハードリンクとは同じID(iノード)にアクセスするファイル(ディレクトリ)のことであり、新しくハードリンクを張れば、同じ実体(右図のActual Data on Disk)へアクセスする方法が複数あると言うことになる。そのいずれから変更を加えても、対象となる実体やiノードは同一であるため、見かけ上すべてのファイルに変更が反映される。これにより、あたかもソフトリンクであるかのように機能する。

ソフトリンクでは、リンク対象(オリジナル)が改名されたり、ディレクトリを移動したりするとリンクが無効になってしまう。一方ハードリンクでは、オリジナルは単に先に張られたハードリンクというだけであり、後から張られたハードリンクとの差はない。したがって、オリジナルを改名したり、どこかに移動したりしてもリンクが切れることはない(右図の"LINK A.TXT"をたとえば"LINK C.TXT"のように改名しても、"LINK B.TXT"には影響しない)。

ファイルに複数のハードリンクを作ることができるファイルシステムでは、ファイルを削除するというのはハードリンクを削除するという意味で使われる。そのようなシステムではファイルはハードリンクによる参照カウント(リンクカウント)を記録しており、1つのハードリンクが削除された場合でも、別のハードリンクが存在している限り、固有のiノードを持つファイルの実体は削除されずに残る。参照するハードリンクがなくなった時点でファイルが削除される。
なお、ハードリンクはその性質上ファイルシステムの機能に強く依存しているため、異なったボリューム間をまたがったリンクを作成するのは原理的に不可能である。

ファイルに別名をつける機能としてのハードリンクは、主にソフトリンク(UNIXではシンボリックリンク)が実装されていなかった時代のUNIXで用いられた。最近ではNTFSやHFS+にも実装されており、今日利用されている多くのオペレーティングシステムに備わっているが、ファイルに別名をつける目的には、ボリューム間でもリンクを作ることができ、管理も簡単なソフトリンクを用いることが多い。

UNIXにおいては、各ディレクトリが3種類のハードリンクで参照されているのが特徴的である。tmpディレクトリに対して

・親ディレクトリからそのディレクトリを参照するためにつけられた「tmp」という名前
・そのディレクトリから自身を参照するためにつけられた「.」という名前
・子ディレクトリからそのディレクトリを参照するためにつけられた「..」という名前

なお、ハードリンク「..」はそのディレクトリが持つ子ディレクトリと同数が存在する。

[引用]
 https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%89%E3%83%AA%E3%83%B3%E3%82%AF

ハードリンクの言い方を少し言い換えると、
一つのファイルやディレクトリに対してファイルシステム内で、
複数のパス(名称)を設定できるということ。

ハードリンクはリンクファイルを介さず直接本体を指し示すため本体の削除ができ、本体を移動・改名しても参照は維持されるが、同じファイルシステム上に現に存在するファイルにしか設定できない。
[引用]
https://e-words.jp/w/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF.html
一般的なファイルシステムでは、ストレージ内に記録されたファイルの実体であるデータとは別に、管理領域にファイル名や位置(含まれるディレクトリ)、作成日時などの情報を記録している。ある特定のデータの実体に対して、それを指し示すファイル名を管理領域中に複数作成することができるのがハードリンク機能である。
[引用] 
https://e-words.jp/w/%E3%83%8F%E3%83%BC%E3%83%89%E3%83%AA%E3%83%B3%E3%82%AF.html


windows系でのソフトリンク

ショートカット、シンボリックリンク、ジャンクションのソフトリンクとハードリンクが存在する。

画像61

画像62

[引用画像]https://news.mynavi.jp/article/liunx_win-12/

ショートカットは一番見たことあるものだと思われるが、ファイル・フォルダを右クリックして、ショートカットの作成とすれば簡単に作成できる。

そのほかにおいては、コマンドプロンプトなどで作成可能。

MKLINK 

画像63

コマンド 内容
mklink リンクパス ファイルパス
ファイルにシンボリックリンクを作成
mklink /h リンクパス ファイルパス
ファイルにハードリンクを作成
mklink /d リンクパス フォルダパス
フォルダにシンボリックリンクを作成
mklink /j リンクパス フォルダパス
フォルダにジャンクションを作成
[引用・引用画像] https://news.mynavi.jp/article/liunx_win-12/
ハードリンク
 同一ファイルシステム内のファイルに対してのみ作成可能。元のファイルとハードリンクされたファイルは同一のファイルであり差はない。ハードリンクの作成はデータにアクセスする名前を増やす作業とも言える
シンボリックリンク
 ファイルに対してもフォルダに対しても作成可能。ファイルの場合は元ファイルへアクセス、フォルダの場合、フォルダ名はシンボリックリンク名のまま元のフォルダの内容へアクセス。作成するには管理者権限が必要
ジャンクション
 フォルダに対して作成可能。フォルダ名はジャンクション名のまま元のフォルダの内容へアクセス
ショートカット
 ファイルに対してもフォルダに対しても作成可能。ファイルもフォルダも元ファイルへのアクセス
[引用] https://news.mynavi.jp/article/liunx_win-12/

ハードリンク
同一ファイルシステム内でのみ作成可能で、かつ、ファイルに対してのみしか作成できない。


GUIとして挙動の確認は以下のサイトを参照。


Linux系でのソフトリンク

ハードリンクとシンボリックリンクの2種でわかりやすい。

コマンド 内容
ln ファイルパス
リンクパス ファイルにハードリンクを作成
ln -s ファイルパス リンクパス
ファイルにシンボリックリンクを作成
ln -s ディレクトリパス
リンクパス ディレクトリにシンボリックリンクを作成
[引用] https://news.mynavi.jp/article/liunx_win-12/
ハードリンク
同一ファイルシステム内のファイルに対してのみ作成可能。元のファイルとハードリンクされたファイルは同一のファイルであり差はない。ハードリンクの作成はデータにアクセスする名前を増やす作業とも言える
シンボリックリンク
ファイルに対してもディレクトリに対しても作成可能。シンボリックリンクそのものを指すかシンボリックリンクの指す先を利用するかは、このファイルを利用するコマンドやアプリケーションがどのように利用するかによって変わる
[引用] https://news.mynavi.jp/article/liunx_win-12/


macOSでのソフトリンク

エイリアスシンボリックリンクのソフトリンクとハードリンクが存在する。

エイリアスはwindowsでいうショートカットに近い概念。

画像64

画像65

[引用画像] https://webrandum.net/alias-symbolic-link/

フォルダ・ファイルを右クリックしてエイリアスを作成より作成できる。
アイコンには矢印マークがつくためエイリアスなのかどうかは比較的判断しやすい。

シンボリックリンクは

$ ln -s シンボリックリンクにしたいフォルダの絶対パス シンボリックリンクを配置したいディレクトリ


エイリアスに出来なくて、シンボリックリンクに出来ること
cdコマンドが使える。もうこれ以上に優先すべき事項がない。
開発をする上で、環境設定上どうしてもフォルダ構成が崩せない、特定のフォルダに入れなければいけないことが多々ある。
自分は開発系は全て~/Developer/というフォルダを作ってここに突っ込んでやっているが、上記のような状況になった場合にむず痒くなる。し、「あのプロジェクトのファイルはどこだ」という事になりやすい。
このような状況の時、プロジェクトのフォルダのエイリアスを作成して~/Developer/に突っ込んでおけば良いのだが、エイリアスには難点がある。
cdコマンドによる移動が使えないのだ。

シンボリックリンクなら出来る
ところがどっこい、シンボリックリンクなら出来るのだ。
エイリアスだと、オリジナルのファイルそのものを移動した時に追跡してくれる。とかいう記述をどっかで見たが、シンボリックリンクも追跡してくれる。確認した。
エイリアスの方が優れている点が見つからない…
[引用] https://qiita.com/hashimotoryoh/items/9a675a769244d61c11bb




Time Machine

Time MachineはMacOSに備わっている、MacOSやデータをバックアップするシステム。

Time Machineは基本的にHFS+のファイルシステムでフォーマットしたHDD等々でしか使えなかったが、
BigSurよりAPFSも対応した。


Time Machineでは、特定時間ごとの全ファイルのスナップショットをバックアップします。1回目は、全てのファイルをバックアップコピーしますが、2回目以降は、差分だけを記録します。でもTime Machineのドライブをファインダーで見ると、あたかも毎回の記録が全て揃っているように見えます。Time Machineが頑張ってそのように見せているのです。
この機能は、APFSで導入されたクローン機能と似ています。あるファイルをクローン機能で複写すると、物理的なデータは一つしかないけど、それを2個に見せてくれます。片方のコピーに変更が加わると、その変更分だけを記録します。おそらくは、Time MachineのコードがAPFSの開発にも役立っていたのではないかと思います。逆に、APFSに備わったクローン機能をTime Machineで使えば、よりシンプルに効率よく実現できるはずです。ファイルシステムの機能ならば色々な場面で動作チェックされますから、バグが減って、堅牢になって、さらには最適化が進んで高速化すると期待できます。でもAPFSが実用化されても、今までTime MachineはHFS+を使ってました。移行に手こずっていたのかもしれません。でもようやくBig Surで対応しました。
[引用] https://bootmacos.com/archives/11435


 この変更はmacOS 11 Big Sur Beta 3からテストされており、AppleはBig Surでも引き続き既存のHFSフォーマットのTime Machineをサポートしているので、古いmacOSでフォーマット(HFS+)したTime Machineボリュームを接続しても利用できますが、
新しいHDDやSSDをBig SurのMacに接続してTime Machineボリュームとして利用しようとすると、APFSでフォーマットされ、あまりないケースだとは思いますが、APFSに対応していない古いmacOSやWindowsではボリューム内の確認もできないので注意してください。
[引用] https://applech2.com/archives/macos-11-big-sur-apfs-formatted-time-machine.html


スクリーンショット 2021-06-20 16.20.57

スクリーンショット 2021-06-20 16.21.07


スクリーンショット 2021-06-20 16.22.44


Macintosh HD - data


MacOS catalina以降に MacintoshHD -dataというボリュームがMacintoshHDとは別に存在するようになった。

画像31

画像32


Catalina以前はMacintoshHDのみで管理していたが、
macOSに関するファイルは読み取り専用の「MacintoshHD」に、その他のデータは「MacintoshHD - Data」で管理する用に仕様変更となった。



端的に言うと、
・Macintosh HD:システムボリューム
・Macintosh HD - Data:ユーザーデータボリューム
という振り分けがなされています。

ディスクユーティリティ上ではボリューム(≒パーティション)が分けられている形ですが、Finder上では両方のボリュームは統合され、『Macintosh HD』の単一ボリュームとして表示されるようになっています。
[引用] https://apple-pi.net/tips-macos-catalina-clean-install/ 


macOS Catalina は、Mac 上のほかのファイルとは切り離された読み取り専用のシステムボリュームで実行されます。Catalina にアップグレードすると、2 つ目のボリュームが作成され、ファイルによっては一部「Relocated Items」に移動する場合があります。

macOS Catalina は専用のシステムボリュームで実行されます。このボリュームは読み取り専用で、「Macintosh HD」という名前が付いていますほかのすべてのデータとは切り離されているので、重要なオペレーティングシステムのファイルが間違って上書きされる心配がなくなりました。ファイルとデータは、「Macintosh HD - Data」という別のボリュームに保管されます。Finder では、両方のボリュームが「Macintosh HD」として表示されます。
[引用] https://support.apple.com/ja-jp/HT210650
以前のバージョンの macOS から macOS Catalina にアップグレードすると、アップグレード中に読み取り専用のボリュームが作成されます。これまで起動ボリュームに保存されていたファイルやデータはこの新しいボリュームに保存されるようになり、そのうちの一部は、「Relocated Items」という新しいフォルダに表示される場合があります。ファイルが見つからない場合は、このフォルダを調べてみてください。
macOS Catalina では、ファイルやデータを読み取り専用のシステムボリュームに保存したり、コマンドライン (ターミナルなど) から「ルート」ディレクトリ ( / ) 書き込んだりすることはできなくなりました。
[引用] https://support.apple.com/ja-jp/HT210650


「Relocated Items」フォルダについて
アップグレード処理中に 2 つの個別のボリュームが作成される際、新しい場所に移動できなかったファイルやデータは「Relocated Items」フォルダに入れられます。「Relocated Items」フォルダは、「ユーザ」フォルダ内の「共有」フォルダ (/ユーザ/共有/Relocated Items) にあり、デスクトップ上のショートカットからアクセスすることもできます。「Relocated Items」フォルダには、これらのファイルについて説明した PDF 書類も入っています。
[引用] https://support.apple.com/ja-jp/HT210650

日本語に設定しているmacOSでは「Relocated Items」は「場所が変更された項目」という名前になっている。

スクリーンショット 2021-10-11 6.33.08



Catalina以降のMacintoshHDの削除方法


画像34

[引用画像] https://support.apple.com/ja-jp/HT208496


「macOS復旧から起動する」 : 電源起動時に、Command + R 長押しして入るシステムを開き、

ディスクユーティリティより、Macintosh HDを初期化使用すると
「ボリュームグループを消去」というボタンが存在するようになる。
これで消去しようとするとMacintoshHDとMacintoshHD - Dataが両方フォーマットされる。

MacintoshHD単体で消去しようとしても、MacintoshHD - Dataはボリュームとして存在し続けるので注意。


『Macintosh HD - Data』ボリュームを削除するには、
Macintosh HD - Data選択
消去タブ選択
ボリュームグループを消去選択
もしくは、
Macintosh HD - Data選択
消去タブ選択
消去選択
左上にある『ボリューム』の-選択 → 削除選択
とすればよい。
[引用] https://apple-pi.net/tips-macos-catalina-clean-install/




BigSurマウントポイント



Reference


ストレージの空き容量の表示 -Mac- | Kinchan's Blog

【Mac】ハードディスク容量を圧迫しているディレクトリをあぶり出す方法

Macで容量の大きなフォルダをduコマンドで確認する - Qiita

【Mac】容量確認方法!HDDの空き容量を確認するアプリやコマンドを解説! | アプリやWebの疑問に答えるメディア

dfコマンドについてまとめました【Linuxコマンド集】

コンピュータの内蔵ディスク - Apple サポート

macOSとWindowsを1台で使いたい!デュアルブートに使える「パーティション分割」の方法 | ギズモード・ジャパン

dfコマンドでディスクの空き容量を表示する【unixコマンド】-FarGo

df - コマンド (プログラム) の説明 - Linux コマンド集 一覧表

【技術備忘録③】容量監視コマンドの「df」「du」コマンドの習得で、原因究明力の向上 - Qiita

ASCII.jp:ハードディスクと外付けディスクアレイ装置

そもそもストレージって何だか分かりますか?:情報資産管理とバックアップポリシー(3)(1/2 ページ) - ITmedia エンタープライズ

メモリ(memory)とは - IT用語辞典 e-Words

ストレージとは?メモリとの違いやSSDとHDDの比較についても紹介 | システム運用ならアールワークスへ

フラッシュメモリの仕組みについて、フラッシュメモリであるSSDとHDDの違いなども解説|ドスパラ通販【公式】

ブロックストレージ・ファイルストレージ・オブジェクトストレージの違いを解説 | システム運用ならアールワークスへ

ネットワークハードディスク(NAS)とファイルサーバーの違いとは? / アイオープラザ

ファイルサーバーとNASは何が違う?比較と選ぶ際のポイント|コラム|クラウドソリューション|サービス|法人のお客さま|NTT東日本

パーティションテーブルとは何か - PCと解

「プライマリパーティション」と「拡張パーティション」の違い - PCと解

BIOSとUEFI パソコン初心者講座

MacとWindowsの「パーティションマップ形式」「ファイルフォーマット形式」対応表

ブートセクタの修復 - PCと解

アクティブパーティションとは何か - PCと解

ブートセクタ (boot sector)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

https://wa3.i-3-i.info/word15562.html

ブートセクタとは何か - PCと解

Macのディスクユーティリティで利用できるファイル・システム・フォーマット - Apple サポート

Mac OS X:ファイルシステムのジャーナリングについて - Apple サポート (日本)

ジャーナリングとは何ですか? | Too クリエイターズFAQ | 株式会社Too

Macのフォーマット・どれを選べば良い?|サウンドフレーム|note


実は危険??「exFATフォーマット」との付き合い方|note

【DIT】ラージフォーマット撮影時の大容量SSD事情|note

【2021年 exFATを改めて検証】 その1「マウント互換性について」|note

Microsoft、Linuxカーネルで公式に「exFAT」サポート

exFAT ファイルシステムの仕様 - Win32 apps

プロプライエタリソフトウェア - Wikipedia

米Microsoftが「exFAT」の技術仕様を公開、Linuxカーネルへのマージを認める | OSDN Magazine

iノードとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

https://wa3.i-3-i.info/word14804.html

inode - Wikipedia

ファイルシステム(ext2/ext3/ext4)の基本情報と選び方

ext2 - Wikipedia

ext3 - Wikipedia

ext4 - Wikipedia

File Allocation Table - Wikipedia

exFAT - Wikipedia

「アロケーションユニットサイズ」とは? ― USBメモリやmicroSDカードなどをフォーマットするとき、「標準」では不適切な場合がある!(natsuki)

ファイルやフォルダーのサイズとディスク上のサイズが違う理由を徹底解説!

クラスタ、セクタの違いと"ディスク上のサイズ"

アロケーションユニットサイズの意味を深く理解する | パソコンの問題を改善

https://pc-kaizen.com/what-is-allocation-unit-size

アロケーションユニットサイズについて パソコン(PC)の森

セクタとは ハードディスクのデータとセクタ・ブロックの関係|パソコン修理・ケーズファクトリー

https://www.pcksfactory.com/hdd/sector.html

AFTと非AFTの違い|HDD交換のパソコン修理ケーズファクトリー

https://www.pcksfactory.com/hdd/aft.html

HDDのセクタサイズ~512セクタと4Kセクタ【パソコン購入術】

https://www.pasonisan.com/pc-storage/hdd-512-4ksector.html

ext3フォーマット時のブロックサイズ - hiroki.kanaの日常

https://blog.hirokikana.com/dev/ext3_blocksize/

VFSとファイルシステムの基礎技術

仮想ファイルシステム - Wikipedia


LinuxのファイルシステムとカーネルのVFSについて

https://4geek.net/about-linux-file-system-and-kernel-vfs/

Windowsユーザーに贈るLinux超入門(11) WindowsのドライブとLinuxのマウント、何が違う? | TECH+

この1ページで一通りわかる!Linuxのマウント(mount)について

https://eng-entrance.com/linux-mount

デバイスファイル - Wikipedia

【決定版】NTFS・exFATの違い|外付けハードディスク/USBメモリのおすすめのファイルフォーマット | Smart Eco Times


macOS Catalina の読み取り専用のシステムボリュームについて - Apple サポート (日本)

macOS Catalina の初期化に戸惑っているあなたへ。「Macintosh HD - data」ってなんだ... - タネマキ

完全なMac初期化方法とフォーマット時の注意点 | 8vivid

Catalinaのクリーンインストール注意点とセットアップ | ココフラッペ

LVM とは - Qiita

LVMってそもそもなんなのさ!?:ぴろにっき:SSブログ

コンテナ、ボリューム、またはパーティションはすべて同じですか?

Core Storage - Wikipedia

外付けHDDをCore Storage形式に変換する - 新・OS X ハッキング!(46) | マイナビニュース

Yosemite使いは知っておくべき「Core Storage対策」 - 新・OS X ハッキング!(129) | マイナビニュース

HDM for MAC Core Storage設定のバックアップと復旧について › Knowledge Base

APFSコンテナってなに? ボリュームやパーティションとの違い

macOSの新ファイルシステム「APFSフォーマット」のメリット・デメリット | データ復旧のパソコンサポートやまもと

MacでのHDDフォーマット方法。APFSなどの形式の違いもまとめて紹介!

Linuxの権限確認と変更(chmod)(超初心者向け) - Qiita

Macターミナルコマンド「chmod」の使い方 | D-Box

chmod コマンド - Qiita

シンボリックリンク(ソフトリンク)とは - IT用語辞典 e-Words

【Mac】エイリアスを使うならシンボリックリンクを使え - Qiita

Mac ターミナル: 初心者向け使い方、コマンド一覧、ショートカットなど

Macでシンボリックリンクを利用しよう | KAMIDE's ♪Note

LVM とは。RAID との違いと LVM の必要性について | TURNING POINT

Debian 管理者ハンドブック 第 12 章 高度な管理

【図解】RAIDグループ/LUN/ボリューム/パーティションの違いと各メリット,ディスクとドライブの違いについて | SEの道標

RAID - Wikipedia

ソフトウエアRAIDとハードウエアRAIDの違いは? | 日経クロステック(xTECH)








いいなと思ったら応援しよう!