パーティションとは

ディスクに作られた論理的な仕切りのこと。OSはディスク単位、およびパーティション単位でディスクを認識する。まず気をつけたいのがパーティション=ファイルシステムではないということ。パーティションは、文字通り物理的なディスク上に作られた論理的な仕切り。そして、ファイルシステムはパーティションごとに作られ、OSに認識される。さらに、ファイルシステムっていうのは、データの置き場所だけではなく、そこからデータを取り出すソフトの部分も指すということは肝に銘じておきたい。

パーティションテーブル(MBRとGPT)

mbr,gptのはなし

ディスクの先頭にかかれたセクター(512bit)は特別な領域である。ここにはディスク上のパーティションの構成情報を格納しているパーティションテーブルが存在する。パーティションテーブルには様々なフォーマットが存在するが、現代、最も使われているのはMBRGPTである。だが、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の方が低レイヤーを扱っている。