LoginSignup
101
96

More than 5 years have passed since last update.

Linuxのファイルシステムについて勉強した内容をまとめてみた

Last updated at Posted at 2016-01-31

ファイルシステムの役割

書き込み読み込みなどの操作をファイルシステムが抽象化して記憶媒体の種類が違ってもread writeの操作を行えるようにしている。
ファイルシステムにも種類があり、ext2 ext3 ext4 xfsなどが挙げられる。
ext4はCentOS6デフォルトで使われ、xfsはCentOS7からデフォルトのファイルシステム。
ネットワークと同様に規格が多くあるものには必ずインターフェースとなるものが定められ、Linuxにおけるファイルシステムの規約はVFS(Virtual File System)になる。

VFSの構成

file_system_type

ファイルシステムの役割でも挙げた通りLinuxのファイルシステムにはいくつかタイプが存在する。
CentOS6ではext4がデフォルトCentOS7からはxfsがデフォルト
詳しくはこちらの記事が参考になる。

現在マウントされているファイルタイプを確認する

$ df -T

スクリーンショット 2016-01-26 3.24.47.png

/dev下のデバイスがどのファイルタイプでフォーマットされているかは下記コマンドで確認出来る。

$ df -T /dev/sdb1

スクリーンショット 2016-01-26 3.26.23.png

inode

VFSの抽象化の仕組みの一つとしてiノードがある。
これはファイルが記録媒体の物理的などこの位置に保存されているか、ディスク情報、ブロック情報を持っている。
ディスクがフルになって保存できなくなるのと同じようにiノードにも使用できる量が決まっており、枯渇するとファイルが作れなくなったりする。
iノードの使用数の確認方法は以下のとおり。

$ df -i

スクリーンショット 2016-01-26 1.15.49.png

super_block

スーパーブロックは1つのファイルシステムに1つだけ存在する。
スーパーブロックの役割はファイルシステムの管理情報を記録する領域のことで、詳しくは下記のコマンドで確認出来る

$ dumpe2fs -h /dev/sdb1

スクリーンショット 2016-01-26 6.10.29.png

デバイスを操作する

これからの操作にはデバイスをフォーマットしたりマウントを行ったり下手をするとOS自体が立ち上がらなくなる恐れのある操作をするため、Vagrantを使用して行っています。

vagrantにディスクを追加する

# -*- mode: ruby -*- # vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos65-x86_64"
  config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box"
  config.vm.network :private_network, ip: "192.168.33.10"
end

まずはこの状態のVagrantfileでvagrant upを行い、/dev下を見てみるとHDDはひとつだけ(sda)です。
sdaとはSATAかSCSI接続されたHDDを指しており、HDE接続であればhdaとなっています。
sda1..2と続くのはパーティーションの数です。
スクリーンショット 2016-01-26 7.14.00.png

新たにディスクをマウントするためにVagrantfileを修正して、ディスクの追加を行います。
下記のようにVagrantfileを修正します。

# -*- mode: ruby -*- # vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos65"
  config.vm.network :private_network, ip: "192.168.33.15"

  # 以下のブロックを追加する
  config.vm.provider :virtualbox do |vb|
    file_to_diskes = ["./tmp/disk.vdi"]
    file_to_diskes.each do |file|
      unless File.exist?(file)
        vb.customize ['createhd', '--filename', file, '--size', 20 * 1024]
        vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file]
      end
    end
  end
end

修正したのち、vagrant reloadを行い、/dev下を覗いてみるとsdbが追加されています。
パーティーションとは違い、同じ形式のディスクが認識されると連番ではなく末尾のアルファベットが更新されていきます。
sda sdb sdc...

スクリーンショット_2016-01-26_7_14_18.png

パーティーションを切る

パーティーションとは論理的に分割された領域のことを指しており、1つのハードディスク(vagrantなので仮想ディスク)には最低でもひとつ以上のパーティーションで構成されている。
そのためまずは追加したsdbにfdiskコマンドを使用してパーティーションを作成します。

fdiskコマンドは対話形式でパーティーションの設定を入力していくので結果は以下のとおりです。

[root@vagrant-centos65 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x865e7cbd.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n

# pを入力 primaryとextendedの違いは今回はしません
Command action
   e   extended
   p   primary partition (1-4)
p

# 最初のパーティーションなので1を入力
Partition number (1-4): 1

# ディスクの書き込み位置を入力 基本はdefaultに表示される値を入力すればおk?
First cylinder (1-2610, default 1): 1

# パーティーションのサイズを入力 今回は1G
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G

# パーティーションを2つ作成するのでもう一周
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (133-2610, default 133): 133
Last cylinder, +cylinders or +size{K,M,G} (133-2610, default 2610): +1G

# pを入力すると現在の設定を表示してくれる
Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x865e7cbd

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         264     1060290   83  Linux

# 最後はwを入力して保存
Command (m for help): w

パーティーションの情報を確認するには下記コマンドを実行する

# fdisk -l

スクリーンショット 2016-01-26 8.20.22.png
はい/dev/sdb1と/dev/sdb2が作成されました。

ディスクをフォーマットする

file_system_typeの項目で説明しましたが、ディスクにはファイルタイプが存在します。
ext4やxfsはファイルシステムの仕様が異なるため、ディスクがどのような形式で保存されるのかフォーマットさせないとならない。
これがいわゆる新品のディスクを購入した時にやるフォーマットの作業です。

フォーマットは下記コマンドで行える。
今回はVagrantにcentos6を入れているため、ext4形式でフォーマットを行う。

[root@vagrant-centos65 ~]# mkfs -t ext4 /dev/sdb1
# あるいは
[root@vagrant-centos65 ~]# mkfs.ext4 /dev/sdb1

ディスクをマウントする

パーティーションを切ってフォーマットすると下ごしらえは完了です。
これでディレクトリにマウントすれば使えるようになります。
今までの例ではsdbを2つのパーティーションに分けたので、/mnt下に以下のディレクトリを作成してマウントしてみます。

[root@vagrant-centos65 ~]# mkdir /mnt/sdb1_mount_target
[root@vagrant-centos65 ~]# mkdir /mnt/sdb2_mount_target

以下のコマンドで作成した2つのディレクトリをマウント。

[root@vagrant-centos65 ~]# mount /dev/sdb1 /mnt/sdb1_mount/
[root@vagrant-centos65 ~]# mount /dev/sdb2 /mnt/sdb2_mount/

マウントが完了したら確認してみる。

スクリーンショット 2016-01-31 20.14.40.png

OS起動時に自動でマウントされるように設定する

今のままでの設定ではOSを再起動すると再度マウントしなくてはならない。
そのため/etc/fstabを修正する。

#
# /etc/fstab
# Created by anaconda on Thu Dec  5 14:15:50 2013
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=ecd27adf-074b-4511-8cee-4a08a4620a4f /                       ext4    defaults        0 0
UUID=6a229de0-2206-4e10-b1a2-496ea60ec30e swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
# 以下を追加
/dev/sdb1               /mnt/sdb1_mount/        ext4
/dev/sdb2               /mnt/sdb2_mount/        ext4

「マウント対象のディスク」「マウントポイント」「ファイルシステムの種類」の順で指定する。
マウント対象のディスクの指定の仕方はボリュームラベルやUUIDを指定することが出来ます。
試しに設定が完了したらvagrantを再起動して、df -T コマンドで/mnt/sdb1_mount/ を確認して/dev/sdb1がマウントされていれば成功です。

以上!

101
96
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
101
96