ファイルシステムの役割
書き込み読み込みなどの操作をファイルシステムが抽象化して記憶媒体の種類が違っても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
/dev下のデバイスがどのファイルタイプでフォーマットされているかは下記コマンドで確認出来る。
$ df -T /dev/sdb1
inode
VFSの抽象化の仕組みの一つとしてiノードがある。
これはファイルが記録媒体の物理的などこの位置に保存されているか、ディスク情報、ブロック情報を持っている。
ディスクがフルになって保存できなくなるのと同じようにiノードにも使用できる量が決まっており、枯渇するとファイルが作れなくなったりする。
iノードの使用数の確認方法は以下のとおり。
$ df -i
super_block
スーパーブロックは1つのファイルシステムに1つだけ存在する。
スーパーブロックの役割はファイルシステムの管理情報を記録する領域のことで、詳しくは下記のコマンドで確認出来る
$ dumpe2fs -h /dev/sdb1
デバイスを操作する
これからの操作にはデバイスをフォーマットしたりマウントを行ったり下手をすると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と続くのはパーティーションの数です。
新たにディスクをマウントするために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...
パーティーションを切る
パーティーションとは論理的に分割された領域のことを指しており、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
はい/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/
マウントが完了したら確認してみる。
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がマウントされていれば成功です。
以上!