4.2. ファイルシステムの作成 (/mnt-handson-cli-instance-stateful-ssh)

作業の目的 [why]

デバイス"/dev/sdh"にファイルシステムを作成して、マウントポイント"/mnt-handson-cli-instance-stateful-ssh"にマウントします。

作業対象 [what]

  • AmazonLinux2環境

標準時間(合計)

8分

パラメータ設定

パラメータ設定の標準時間

2分

作業に必要なモノ・情報 [resource]

作業開始には、以下が全て揃っていることが必要です。

リソース1: ターゲットデバイス名

  • ファイルシステムを作成するターゲットデバイス名です。

  • 今回は"sdh"とします。

リソース2: マウントポイント名

  • 作成したファイルシステムをマウントするマウントポイント名です。

  • 今回は"/mnt-handson-cli-instance-stateful-ssh"とします。

リソース3: ファイルシステムタイプ名

  • 作成したファイルシステムのタイプ名です。

  • 今回は"xfs"とします。

パラメータの指定

作業に必要なパラメータを変数に格納をします。

0.1. ターゲットデバイスの指定

変数の設定:

DEVICE_FILE_NAME='sdh'

0.2. マウントポイントの指定

マウントポイントを指定します。

変数の設定:

MOUNT_POINT_NAME='/mnt-handson-cli-instance-stateful-ssh'

0.3. ファイルシステムタイプの指定

ファイルシステムタイプを指定します。

変数の設定:

DISK_TYPE='xfs'

パラメータの保存

設定されている変数の保存先となるファイル名を指定します。

変数の設定:

DIR_PARAMETER="${HOME}/tmp/parameter-handson-cli-instance-stateful-ssh"
FILE_PARAMETER="${DIR_PARAMETER}/$(date +%Y-%m-%d)-amazonlinux-filesystem-create.env" \
  && echo ${FILE_PARAMETER}

結果(例):

${HOME}/tmp/parameter-handson-cli-instance-stateful-ssh/2019-09-16-amazonlinux-filesystem-create.env

各変数に正しいパラメータ値が格納されていることを確認しながら保存します。

変数の確認:

cat << EOF > ${FILE_PARAMETER}

  # 0.1. DEVICE_FILE_NAME:"sdh"
         DEVICE_FILE_NAME="${DEVICE_FILE_NAME}"
  # 0.2. MOUNT_POINT_NAME:"/mnt-handson-cli-instance-stateful-ssh"
         MOUNT_POINT_NAME="${MOUNT_POINT_NAME}"
  # 0.3. DISK_TYPE:"xfs"
         DISK_TYPE="${DISK_TYPE}"

EOF
cat ${FILE_PARAMETER}

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

タスクの実施

課題

(未検証)

タスク標準時間

6分

1. 前処理

主処理に必要な情報の取得

初期化対象ディスクの指定

変数の設定:

DISK_TARGET="/dev/${DEVICE_FILE_NAME}" \
  && echo ${DISK_TARGET}

結果(例):

/dev/sdh

2. 主処理

ディスクの初期化

変数の確認:

cat << ETX

  # DISK_TYPE:"xfs"
    DISK_TYPE="${DISK_TYPE}"
  # DISK_TARGET:"/dev/sdh"
    DISK_TARGET="${DISK_TARGET}"

ETX

コマンド:

sudo mkfs \
 -t ${DISK_TYPE} \
 ${DISK_TARGET}

結果(例):

meta-data=/dev/sdh               isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=0
data     =                       bsize=4096   blocks=2097152, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

マウントポイントの作成

変数の確認:

cat << ETX

  # MOUNT_POINT_NAME:"/mnt-handson-cli-instance-stateful-ssh"
    MOUNT_POINT_NAME="${MOUNT_POINT_NAME}"

ETX

コマンド:

sudo mkdir ${MOUNT_POINT_NAME}

結果(例):

(出力なし)

ディスクのマウント

変数の確認:

cat << ETX

  # DISK_TARGET:"/dev/sdh"
    DISK_TARGET="${DISK_TARGET}"
  # MOUNT_POINT_NAME:"/mnt-handson-cli-instance-stateful-ssh"
    MOUNT_POINT_NAME="${MOUNT_POINT_NAME}"

ETX

コマンド:

sudo mount ${DISK_TARGET} ${MOUNT_POINT_NAME}

ディスクのマウント確認

コマンド:

df | grep ${MOUNT_POINT_NAME}

結果(例):

/dev/xvdh      8378368   41392   833697    1% /mnt-handson-cli-instance-stateful-ssh

ディスクの所有者の変更

コマンド:

sudo chown ec2-user:ec2-user ${MOUNT_POINT_NAME}

結果(例):

(出力なし)

/etc/fstabへの反映

コマンド:

DEVICE_LINK_NAME=$( \
  file -s ${DISK_TARGET} \
  | sed "s/^.*\`//" \
  | sed "s/'$//" \
) \
  && echo "${DEVICE_LINK_NAME}"

結果(例):

xvdh

コマンド:

sudo blkid

注釈

blkidコマンドは、rootで実行するとキャッシュが残り、そのキャッシュを一般ユーザからも取得ができる(らしい)。

コマンド:

DISK_UUID=$( \
  blkid \
    | grep /dev/${DEVICE_LINK_NAME} \
    | sed "s/^.*UUID=\"//" \
    | sed "s/\".*$//" \
) \
  && echo ${DISK_UUID}

結果(例):

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

コマンド:

DISK_TYPE_TARGET=$( \
  blkid \
    | grep /dev/${DEVICE_LINK_NAME} \
    | sed "s/^.*TYPE=\"//" \
    | sed "s/\".*$//" \
) \
  && echo ${DISK_TYPE_TARGET}

結果(例):

xfs

コマンド:

sudo cp /etc/fstab /etc/fstab.$(date +%s)

変数の確認:

cat << ETX

  # DISK_UUID:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    DISK_UUID="${DISK_UUID}"
  # MOUNT_POINT_NAME:"/mnt-handson-cli-instance-stateful-ssh"
    MOUNT_POINT_NAME="${MOUNT_POINT_NAME}"
  # DISK_TYPE_TARGET:"xfs"
    DISK_TYPE_TARGET="${DISK_TYPE_TARGET}"

ETX

コマンド:

if [ ! $( grep ${DISK_UUID} /etc/fstab ) ]; then
  sudo sh -c "echo \"UUID=${DISK_UUID}     ${MOUNT_POINT_NAME} ${DISK_TYPE_TARGET} defaults,nofail  0  2\" >> /etc/fstab" \
    && sudo cat /etc/fstab |grep ${DISK_UUID}
fi

結果(例):

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx     /mnt-handson-cli-instance-stateful-ssh xfs defaults,nofail  0  2

3. 後処理

完了