partedコマンドでパーティション管理

はじめに

 AWS EC2インスタンス(Amazon Linux)に、3つ目のEBS(ストレージデバイス)を追加して、これをフォーマットする手順を紹介します。
 これまでパーティションを操作するコマンドとしてfdiskコマンドが主流でしたが、ストレージ容量の巨大化、EFIBIOSへの対応などの流れからpartedコマンドが主流になっています。

ラベル作成

 新品のストレージの場合、パーティションテーブル自体が未設定の状態となります。下記の様なメッセージが表示されます。

# parted /dev/xvdc
(parted) p
Error: /dev/xvdc: unrecognised disk label  ← パーティションテーブルが未設定のためエラーメッセージが表示される。

 まずは、パーティションテーブルとしてGPTを作成します。

(parted) mklabel gpt

パーティション作成

 現在のパーティションを確認できるようになります。下記はまだパーティションが1つも作成されていないときの表示です。

(parted) p
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

 今回、すべての容量を1つのパーティションに割り当てることにします。表示単位をセクターに切り替えて、2048s(sはセクターを表します)から、末尾のセクターを指定します。末尾のセクターは管理領域との境目を知るため、ますはストレージ末尾のセクターを指定して、その際表示される警告メッセージから取得します。

(parted) unit s
(parted) p
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 41943040s  ← ストレージの末尾のセクター
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

(parted) mkpart 1 ext4 2048s 41943039s  ← ストレージの末尾のセクターから1小さいセクターを指定する。
Warning: You requested a partition from 2048s to 41943039s.
The closest location we can manage is 2048s to 41943006s.  ← GPTで管理できる範囲が示される。
Is this still acceptable to you?
Yes/No? N  ← 末尾のセクターを確認しただけなのでNを入力して作成をキャンセルする。

(parted) mkpart 1 ext4 2048s 41943006s  ← 末尾のセクターを指定してパーティションを作成する。
(parted) p
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 41943040s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End        Size       File system  Name  Flags
 1      2048s  41943006s  41940959s               1  ← 指定したとおりのセクター範囲でパーティションが作成された。

表示する単位の切り替え

 セクター単位のままだとパーティションサイズがわかりづらいので、適宜見やすい単位を指定して確認します。

(parted) unit B  ← 単位をバイトにする。
(parted) p
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 21474836480B
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start     End           Size          File system  Name  Flags
 1      1048576B  21474819583B  21473771008B               1

(parted) unit GiB  ← 単位をギビバイトにする。
(parted) p
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start    End      Size     File system  Name  Flags
 1      0.00GiB  20.0GiB  20.0GiB               1

フォーマット実行

 パーティションを作成できました、次はOSがマウントできるようにファイルシステムとしてフォーマットします。

(parted) quit  ← partedコマンドを終了する。
Information: You may need to update /etc/fstab.  ← /etc/fstabを更新するようメッセージが表示される。

# mkfs.ext4 /dev/xvdc1  ← /dev/xvdc の1つ目のパーティション、つまり/dev/xvdc1を指定する。
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 5242619 4k blocks and 1310720 inodes
Filesystem UUID: d7fd922a-8914-4363-940c-8dfbd3b54ae2
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

パーティション再確認

 先ほどパーティションを作成したとき、ファイルシステムの項目は空欄でした。今回、ファイルシステムext4でフォーマットしたので、partedコマンドでパーティションを表示すると、ファイルシステムにきext4ときちんと表示されていることが確認できます。

# parted /dev/xvdc
GNU Parted 2.1
Using /dev/xvdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  21.5GB  21.5GB  ext4         1  ← ファイルシステムとしてext4が表示される。

(parted) quit

マウント

 OS(Amazon Linux)にマウントできるようになりましたので、早速マウントしましょう。ここでは、/dev/xvdc1を/mntにマウントすることにします。

# mount /dev/xvdc1 /mnt
# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/xvda1       8123812 1433664   6589900  18% /
devtmpfs          499744      72    499672   1% /dev
tmpfs             508684       0    508684   0% /dev/shm
/dev/xvdb1       8125844 1672716   6017316  22% /var/www
/dev/xvdc1      20510312   44992  19400416   1% /mnt  ← 無事マウントされた。

Python3.6ビルドとvenv環境構築

はじめに

 Python3.6のビルドとインストール、venv環境の構築手順を紹介します。デフォルトでインストールされている Pythonに影響を与えないよう、任意の場所(/opt/python36 や ~/opt/python36など)にPython3.6をインストールします。このPython3.6を使って、venv環境を構築できるようにします。

続きを読む

AWS Lambda を Node.js 6.10 + Promise で使ってみる

はじめに

 AWS LambdaでNode.js 6.10が利用できるようになりましたね。以前の投稿でPromiseの使い方について紹介しました。今回、DynamoDBからデータを取得する方法をはじめ、非同期処理を直列的・並列的に実行する方法をパターン化してみました。

続きを読む

nコマンドによる任意のバージョンのnodejsのインストール

はじめに

 nodejsの開発環境を構築する際、OS標準パッケージとしてnodejsが用意されているのはいいものの、バージョンが古かったり特定のバージョンに変更したかったりとかゆいところに手が届かないことがあります。
 そこで、npmコマンドでnパッケージをインストールして、目的のバージョンのnodejs開発環境を構築できるようにします。
 nパッケージのインストールはOS標準パッケージでインストールしたnpmコマンドで実施します。後に、nコマンドにより目的のバージョンのnodejsに切り替えます。nコマンドによりnodejsのバージョンが管理できるようになれば、OS標準パッケージのnodejsは削除することができます。OS標準パッケージのnodejsとnコマンドによりインストールしたnodejsの競合を防ぐため、OS標準パッケージのnodejsは削除しました。

続きを読む

Pythonでランダム文字列生成

はじめに

 パスワード生成やダミー文字列生成などで、ランダム文字列を生成する機会がたまにあります。しかし文字数や使用できる文字など、都度都度変わるもの。そこで、お手入れしやすいプログラムを作成してみました。

続きを読む

gitoliteでプライベートGitサーバーを構築する

はじめに

 個人でプライベートに使用するためのGitサーバーをAmazonLinux(EC2)に構築してみました。Gitサーバーにはgitoliteを採用しました。
 ( 参考: https://github.com/sitaramc/gitolite )
 
 Gitリポジトリの管理は管理用リポジトリgitolite-adminにリポジトリ設定ファイル(リポジトリ名やアクセスできるユーザーの対応付け)やユーザー鍵(ユーザー毎のSSH公開鍵)を作成・更新・削除することで対応します。

続きを読む

TWE-LITE R をUbuntuL14.04LTSに接続する

はじめに

 TWE-LITE R は TWE-LITE DIP をUSBでPCに接続するためのアダプターです。今回、Ubuntu14.04LTSでTWE-LITE Rのドライバをインストールして、認識できるようにします。

続きを読む

MeCab と mecab-ipadic-NEologd と Python3 で形態素解析(ユーザーローカル環境版)

はじめに

 MeCabをユーザーのローカル環境にインストールする必要があり、手順をまとめてみました。gccやmakeは必要になりますので、最低限のコマンドだけはroot権限でインストールしておく必要があります。もしroot権限(sudoコマンドを実行できる権限)があればホストのグローバル環境にインストールできます。グローバル環境にインストールする場合はこちらの投稿を参照してください。

続きを読む

mailコマンドやPerl、Pythonに頼らずにBashだけで添付ファイル付きメールを送信する

はじめに

 AmazonLinuxで新しいホストを構築していると、メール送信テストなどでメールを送信しようとしたときにmailコマンドがデフォルトで使えませんでした。この際依存をsendmailコマンドだけにしてみましたので紹介します。

続きを読む

Django の MySQL 向けモデルで大文字と小文字を区別できるようにする

はじめに

 Django でデータベースバックエンドに MySQL を利用しているとき、CharField や TextField では大文字と小文字を区別しません。例えば「Value A」と「Value a」を区別して取得する場合、

result = Item.objects.filter(value='Value A')
のように取得すると、「Value A」の他に「Value a」や「value a」、「VALUE A」などがあればこれらも取得してしまいます。これは Django が悪いわけではなく、MySQL の挙動が原因です。MySQL で大文字と小文字を区別するためには、VARCHAR や TEXT のカラム定義に BINARY を付ける必要があります。今回、この BINARY を Django で自動的に付けるようにする方法を紹介します。

続きを読む