パーティションとは
ディスクに作られた論理的な仕切りのこと。OSはディスク単位、およびパーティション単位でディスクを認識する。まず気をつけたいのがパーティション=ファイルシステムではないということ。パーティションは、文字通り物理的なディスク上に作られた論理的な仕切り。そして、ファイルシステムはパーティションごとに作られ、OSに認識される。さらに、ファイルシステムっていうのは、データの置き場所だけではなく、そこからデータを取り出すソフトの部分も指すということは肝に銘じておきたい。
パーティションテーブル(MBRとGPT)
ディスクの先頭にかかれたセクター(512bit)は特別な領域である。ここにはディスク上のパーティションの構成情報を格納しているパーティションテーブルが存在する。パーティションテーブルには様々なフォーマットが存在するが、現代、最も使われているのはMBRとGPTである。だが、MBRには2つの大きな制限がある。作成可能なパーティションの最大容量の制限と、ブートモードの制限である。
パーティションの最大容量の制限は、パーティションのセクタ管理に使われるbit数が原因である。MBRはセクタ管理に32bitを使っている。1セクタ=512バイトであるため、2^(9+32) = 2048.0Gbyteということになる。一方、GPTは2^64byteまでパーティションを作ることが可能である。
また、ブートモードの違いに関しては、近年のUEFIはMBRに対応していないため、MBR形式のディスクにインストールされたOSはUEFIのマザーボードではブートが不可能となる。
fdiskを使ってハードディスクにパーティションを作る(GPTを作る場合はgdiskを使う)
Linux上でMBRにフォーマットされたパーティションをファイルシステムの一部に組み込むまでの流れを説明する。なお、例ではfdiskを使っているが、GPTでフォーマットされたパーティションを利用する場合はgdiskコマンドを利用すること。
デバイス一覧表示
fdisk -l
特定デバイスの詳細表示
fdisk -l /dev/sda
特定デバイスのパーティション作成
fdisk /dev/sda
パーティション作成後にカーネルにパーティションテーブルを認識させる
リブートするか、
sudo partprobe /dev/sdc
これをしないと、次のファイルシステムを作れない。
ファイルシステム作成
パーティションを作ってもファイルシステムを作らないとOSはディスクにファイルを保存できない。 よって、ファイルシステムを作る。
sudo mkfs.ext4 /dev/sdc1
これは結構大事なポイントです。 ちなみに、ここでext4ではなく、xfsを作りたい場合は次のようにします。
sudo mkfs.xfs /dev/sdc1
って感じですね。
ちなみにこのmkfsで作れるのは、linuxにデフォルトでインストールされているファイルシステムのみです。 例えば、vfatとか、minixとか、ext4とかですね。分散ファイルシステムであるlustreとか、 広域分散ファイルシステムのchfsとか (つくばの建部先生が作ったやつですね) をインストールしたい場合は、まったく別のアプローチをとる必要があることを承知してください。よろしくお願いします。
ちなみにちなみに、上のでxfsを作ったときの出力結果をこちらに置いておきます。
meta-data=/dev/sdb2 isize=512 agcount=4, agsize=54985734 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=219942934, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=107394, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
osのファイルシステムへのマウント
sudo mount /dev/sdc1 /mnt/disk1
とかでマウントされる。
外部ディスクの自動マウント方法
以上の方法でディスクにファイルを格納することが可能となる。しかし、mountコマンドによってマウントされるディスクは永続的にマウントされたわけではない。システムの電源が落ちるごとに再マウントしないといけない。そこで、自動で外部ディスクをマウントする方法を説明する。
osが認識しているパーティションの詳細一覧
sudo blkid
blkid stands for block id
こんなのが出てきます。
/dev/sda1: UUID="B66B-4A22" TYPE="vfat" PARTUUID="ee6f8f5b-32ce-4a66-b664-1268778ec648"
/dev/sda2: UUID="fa4e472d-26fa-4626-b7f6-e4b5d595eaa5" TYPE="ext4" PARTUUID="20448904-ecba-48bf-bdc0-498b8a979ef4"
/dev/sda3: UUID="MYs6WD-rtEj-5Ngw-gDoX-x4UH-tmOt-sQ5EeL" TYPE="LVM2_member" PARTUUID="2aeceefd-e1b6-436a-b4dd-42b5ed8f3d84"
/dev/sdb1: UUID="1558cc3b-9664-4e9e-8051-49919485afa3" TYPE="ext4" PARTUUID="34cbf6c4-01"
/dev/mapper/ubuntu--vg-ubuntu--lv: UUID="87910f1b-1ec5-4969-8305-fcd9c6c1832a" TYPE="ext4"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/sdc1: UUID="1073790d-4910-45b9-be46-e6077a1c7ff0" TYPE="ext4" PARTUUID="4e79d1f2-01"
次のセクションで使う、uuid と、typeをメモしておく
自動マウントしたいパーティションを/etc/fstabに書き込む
#automatically mount hdd
UUID=1558cc3b-9664-4e9e-8051-49919485afa3 /home/ray/hdd ext4 defaults 0 0
UUID=1073790d-4910-45b9-be46-e6077a1c7ff0 /home/alphaunpip/hdd ext4 defaults 0 0
こんな感じです。 最後に、dfコマンドでマウントされているかを確認
rebootせずに/etc/fstabの内容を反映させる方法
sudo mount -a
です。
dfとfdisk, gdiskの違い
dfはosにすでに認識されているマウントされたパーティションの詳細情報を見るためのコマンド。使用容量などがみられる。一方fdiskは、物理的にマザボに接続されているディスクに対して操作を行う。新しいパーティションを作ったりするためのコマンド。レベル的には、fdiskの方が低レイヤーを扱っている。