設定 - ストレージ
概要
ここでは、ストレージのマウント方法および再マウント方法を記載する。
ストレージのマウント
アタッチした追加ストレージの情報を確認する。
sudo parted -l
マウント先のディレクトリを作成する。
sudo mkdir -p /run/media/Storage1
マウントを実行する。
sudo mount /dev/sdx /run/media/Storage1
マウントしたストレージが認識されているか確認する。
df -h
ストレージの再マウント
以下のコマンドを実行して、ストレージを再マウントする。
sudo mount -o remount -rw /run/media/Storage1
ストレージの自動マウント
.profileファイルに記述する方法
ホームディレクトリにある.profileファイルに、以下の設定を記述する。
RUNLEVEL=`echo <パスワード名> | LANG=C sudo -S mount -o /dev/sdx /run/media/<ストレージ名>`
また、NASを自動マウントする場合は、以下のように記述する。
RUNLEVEL=`echo <パスワード名> | LANG=C sudo -S mount -o username=<ユーザ名>,password=<パスワード> //<IPアドレスまたはホスト名>/<ディレクトリ名> /run/media/<ストレージ名>`
※注意
NASを使用する場合は、ミドルウェアとしてcifsが必要となるので、以下のコマンドを実行してインストールしておくこと。
sudo zypper install cifs
/etc/fstabファイルに記述する方法
/etc/fstabファイルに以下の行を追記する。
# ローカルストレージ /dev/sdX <マウントディレクトリ> <ファイルシステム名:xfs、ext4、btrfs等> file_mode=0755,dir_mode=0755 0 0 # NAS //<IPアドレスまたはホスト名>/<ディレクトリ名> /run/media/NAS cifs username=<ユーザ名,password=<パスワード>,uid=<マウントするユーザのユーザID>,gid=<マウントするユーザのグループID>,file_mode=0755,dir_mode=0755 0 0
※注意
マウントを実行するユーザのUIDとGIDを調べるには、マウントするユーザで以下のコマンドを実行する。
id
また、下表にfstabのフォーマットを示す。
# fstabのフォーマット例 # X : ストレージ番号, Y : パーティション番号 /dev/sdXY /mnt ext4 defaults 1 2
オプション | 説明 |
---|---|
デバイスファイル名 | デバイスファイル名、LABEL、UUIDを指定する。 |
マウントポイント | ファイルシステムのマウント先のディレクトリ |
ファイルシステムの種類 | ファイルシステムの種類を指定する。 |
マウントオプション | マウントする時のオプションを指定する。 |
dumpフラグ | 1 : dump コマンドによるバックアップの対象になる。1 : ファイルシステムがetx2 / ext3の場合は 1 を指定する。0 : その他の場合は 0 を指定する。
|
fsckのチェック | Linuxの起動時にfsckが確認する順序を指定する。 0、1、2を設定できる。 0 : ファイルシステムを確認しない。 1 : 確認する優先度が最も高い。ルートファイルシステム(/)は 1 である必要がある。2 : その他のの場合 |
ストレージのラベル
ストレージのラベルの確認および変更方法を記載する。
デバイスの確認
lsblk
で対象デバイスを確認する。
# 入力 lsblk # 出力 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 596.2G 0 disk ├─sda1 8:1 0 25G 0 part ├─sda2 8:2 0 250.1G 0 part /mnt/sda2 ├─sda3 8:3 0 317G 0 part / └─sda4 8:4 0 4.1G 0 part [SWAP] sdb 8:16 1 59.8G 0 disk └─sdb1 8:17 1 59.8G 0 part /run/media/user-name/Plamo5.1x64 sdc 8:32 0 1.8T 0 disk └─sdc1 8:33 0 1.8T 0 part /run/media/user-nanme/My Passport sr0 11:0 1 1024M 0 rom
ファイルシステムの種類を確認する
df
コマンドを-T
オプション付きで実行すると、ファイルシステムの種類を確認できる。
# 入力 df -T # 出力 ファイルシス タイプ 1K-blocks 使用 使用可 使用% マウント位置 /dev/sda3 ext4 327052076 62782264 247633500 21% / tmpfs tmpfs 4038320 0 4038320 0% /dev/shm /dev/sda2 fuseblk 262199292 255269036 6930256 98% /mnt/sda2 /dev/sdb1 fuseblk 62643196 3296388 59346808 6% /run/media/hoge/external1 /dev/sdc1 fuseblk 1953480700 818545888 1134934812 42% /run/media/hoge/external2
FAT32のラベル
FAT32のラベルを変更するには、次の書式でmlabel
コマンドを実行する。
::
を付ける必要があることに注意する。
mlabel -i デバイス名 ::ラベル名
mlabel
コマンドを使用するために、mtoolsをインストールする必要がある。
sudo zypper install mtools
例えば、/dev/sdc2のラベルをSAKURAにするには、以下のコマンドを実行する。
sudo mlabel -i /dev/sdc2 ::SAKURA
デバイスをアンマウントし、再びマウントすればラベルが変更されているのが確認できる。
または、例えば、/dev/sdc1をDドライブに割り当てる設定をして、以下のコマンドを実行する。
sudo vim /etc/mtools.conf
drive d: file="/dev/sdc1"
そのラベルを確認するには、-s
オプションを付ける。
sudo mlabel -s d:
ext2 / ext3 / ext4のラベル
- 現在のラベルを確認
e2label <デバイス名>
- ラベルを変更:
e2label <デバイス名> <ラベル名>
NTFSのラベル
- 現在のラベルを確認
sudo /usr/sbin/ntfslabel <デバイス名>
- ラベルを変更:
sudo /usr/sbin/ntfslabel <デバイス名> <ラベル名>
exFATのラベル
exfat-utilsをインストールする。
- 現在のラベルを確認
exfatlabel <デバイス名>
- ラベルを変更
exfatlabel <デバイス名> <ラベル名>
Btrfs
- 現在のラベルを確認
lsblk
- ラベル名を変更
sudo btrfs filesystem label <旧ラベル名のフルパス> <新ラベル名>
クローン
ddrescueコマンド
ddrescueコマンドは、データの複製と復元のために設計されたツールである。
ファイルやブロックデバイス(HDD、SSD、光学式ドライブ等)から別のストレージにデータをコピーする。
もし、読み取りエラーが発生した場合は、最初に無事な箇所をコピーする。
まず、ddrescureをインストールする。
- パッケージ管理システムからインストール
sudo zypper install dd_rescue
- ソースコードからインストール
- GNUの公式Webサイトにあるddrescureページにアクセスして、ソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf ddrescue-<バージョン>.tar.lz
cd ddrescue-<バージョン>
- ビルドディレクトリを作成する。
mkdir build && cd build
- ddrescueをビルドおよびインストールする。
../configure --prefix=<ddrescueのインストールディレクトリ>
make -j $(nproc)
make install
故障および故障寸前のストレージをクローンする場合は、ddrescue
コマンドを2回実行する。
- まず、読み取りエラーが存在しないブロックを全てコピーして、エラーをファイルにマッピングする。
sudo ddrescue -n <クローン元のストレージ> <クローン先のストレージ> <エラーをマッピングするファイル>
- 例 :
sudo ddrescue -n /dev/sdX /dev/sdY ~/rescue1.map
- 次に、クローンされるデータの読み込みを3回試行して、不良ブロックのみをクローンする。
もし、読み込みできない場合は、該当ブロックのデータはクローンしない。sudo ddrescue -d -r3 <クローン元のストレージ> <クローン先のストレージ> <エラーをマッピングするファイル>
- 例 :
sudo ddrescue -d -r3 /dev/sdX /dev/sdY ~/rescue2.map
- クローン先のストレージのファイルシステムが正常かどうかを確認する。
sudo fsck -f /dev/sdY
sgdiskコマンド
sgdisk
は、コンソールにおけるGPTマニピュレータである。
※GPTについて
GPT(GUID Partition Table)とは、グローバル一意識別子(GUID)を使用したストレージ上のパーティションテーブルのレイアウトの規格である。
GPTは、パーティションテーブルのレイアウトを定義するEFI標準の一部である。
sgdisk
コマンドを使用してGPTのストレージを別のストレージにクローンする。
sudo sgdisk -R <クローン先のストレージ> <クローン元のストレージ>
パーティションテーブルをクローンした後、クローン先のストレージに新しいGUIDを設定する。
sudo sgdisk -G /dev/sdX
Clonezilla
Clonezillaの公式サイトからイメージファイル(Stable)をダウンロードする。
ダウンロードしたイメージファイルをUSBメモリ等へ書き込む。
PCをシャットダウンして、クローン先のストレージとUSBメモリをPCに接続する。
PCの電源を投入して、UFEI/BIOS画面から起動ディスクを選択してUSBメモリからClonezillaを起動する。
[Clonezilla live (VGA with large font & To RAM)]を選択して[Enter]キーを押下する。
表示言語を選択した後、[キーボードの種類]を選択する。
[Start Clonezilla] - [device-device] - [Beginner mode] - [disk_to_local_disk]を選択する。
まず、[Choose local disk as source]画面に切り替わるので、クローン元のストレージを選択する。
次に、[Choose local disk as target]画面に切り替わるので、クローン先のストレージを選択する。
[オプション選択]画面では、[-sfsck]を選択する。
[-p choose]または[-p poweroff]を選択する。
[クローン実行]画面に切り替わるので、[Enter]キーを押下する。
[Are you sure you want to continue?(y/n)]メッセージでは、クローン先のストレージを確認して[Y]キーを押下する。
再度、[Are you sure you want to continue?(y/n)]メッセージが表示されるので、[Y]キーを押下する。
クローンが実行される。
クローンの終了後、[Enter]キーを押下する。
エラーメッセージが無ければ正常に成功している。
[poweroff]を選択してClonezillaを終了する。
※注意
ただし、Clonezillaの場合、各パーティションのサイズが変化しないことに注意する。
そのため、GPartedを使用して各パーティションを移動およびリサイズする必要がある。
GParted
Partedコマンドをグラフィカルに使用できるツールがGPartedである。
GPartedのインストールについては、設定 - ストレージのフォーマットとパーティション#GPartedのインストールを参照すること。
また、GPartedはソフトウェアだけでなく、イメージファイルをUSBメモリに書き込んで利用できる形でも提供されている。
GPartedの公式Webサイトを参照すること。
※GPartedのイメージファイルを使用する場合
[GParted Live(Default settings)]を選択する。
[言語/キーボード選択]では、[Don't touch keymap]を選択して、[Which language do you prefer?]においてUSキーボードの場合は33
、JPキーボードの場合は15
を入力する。
[Which mode do you prefer?]は0
を入力する。
下図のようにパーティションが区切られているとする。
例えば、Partition 2と未割り当て領域を結合する場合、隣接するパーティション同士のみ結合できるため、Partition 3を後方に移動する必要がある。
- まず、Partition 3を後方に移動する。
GPartedを起動して、[パーティション]メニューバー - [リサイズ/移動]を選択する。
または、移動するパーティションを右クリックして、[リサイズ/移動]を選択する。 - 警告アラートが出力される場合は、[OK]ボタンを押下する。
- [リサイズ/移動]画面が開くので、画面上部のグラフを右端までドラッグする。
[後方の空き領域]項目が0
になっていることを確認して、[リサイズ/移動]ボタンを押下する。 - 次に、Partition 2をリサイズする。
GPartedの[パーティション]メニューバー - [リサイズ/移動]を選択する。
または、リサイズするパーティションを右クリックして、[リサイズ/移動]を選択する。 - 警告アラートが出力される場合は、[OK]ボタンを押下する。
- [リサイズ/移動]画面が開くので、画面上部のグラフを右端までドラッグする。
[後方の空き領域]項目が0
になっていることを確認して、[リサイズ/移動]ボタンを押下する。 - これにより、Partition 2と未割り当て領域が隣接状態となる。
- 再度、Partiton 2を右クリックして、[リサイズ/移動]を選択する。
- 警告アラートが出力される場合は、[OK]ボタンを押下する。
- [リサイズ/移動]画面が開くので、画面上部のグラフを右端までドラッグする。
[後方の空き領域]項目が0
になっていることを確認して、[リサイズ/移動]ボタンを押下する。 - GPartedの画面下部に、上記の操作が表示されているので確認する。
- GPartedの画面上部にある[✓]ボタンを押下する。
最終確認アラートが表示されるので、[Apply]ボタンを押下する。 - 処理の完了後、エラーメッセージが出力されているかどうかを確認する。
ストレージの総書き込み量(TBW)
SmartMonToolsのインストール
まず、SmartMonToolsをインストールする。
- パッケージ管理システムからインストールする場合
sudo zypper install smartmontools
- ソースコードからインストールする場合
- SmartMonToolsのGithubからソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf smartmontools-<バージョン>.tar.gz
cd smartmontools-<バージョン>.tar.gz
- ビルドディレクトリを作成する。
mkdir build && cd build
- SmartMonToolsをビルドおよびインストールする。
../configure --prefix=<SmartMonToolsのインストールディレクトリ> \
--sbindir=/<SmartMonToolsのインストールディレクトリ>/sbin \
--sysconfdir=/<SmartMonToolsのインストールディレクトリ>/etc \
--localstatedir=/<SmartMonToolsのインストールディレクトリ>/var \
--datarootdir=/<SmartMonToolsのインストールディレクトリ>/share
--with-nvme-devicescan --without-libsystemd
make -j $(nproc)
make install
GSmartControlのインストール (任意)
必要ならば、GSmartControlをインストールしてもよい。
- パッケージ管理システムからインストールする場合
sudo zypper install gsmartcontrol
- ソースコードからインストールする場合
- GSmartControlのビルドに必要なライブラリをインストールする。
sudo zypper install pcre-devel gtk3-devel gtkmm3-devel
- GSmartControlの公式WebサイトまたはGSmartControlのGithubからソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf gsmartcontrol-<バージョン>.tar.gz
cd gsmartcontrol-<バージョン>.tar.gz
- ビルドディレクトリを作成する。
mkdir build && cd build
- GSmartControlをビルドおよびインストールする。
../configure --prefix=<GSmartControlのインストールディレクトリ>
make -j $(nproc)
make install
- GSmartControlのPolKitポリシーファイルを作成する。
sudo vi /usr/share/polkit-1/actions/org.gsmartcontrol-UserAdd.policy
- GSmartControlのビルドに必要なライブラリをインストールする。
# /usr/share/polkit-1/actions/org.gsmartcontrol-UserAdd.policyファイル
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<action id="org.gsmartcontrol">
<message>Authentication is required to run GSmartControl</message>
<icon_name>gsmartcontrol</icon_name>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/GSmartControlのインストールディレクトリ/sbin/gsmartcontrol</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
GSmartControlのデスクトップエントリファイルを作成する。
vi ~/.local/share/applications/GSmartControl.desktop
# ~/.local/share/applications/GSmartControl.desktopファイル [Desktop Entry] Version=1.0 Type=Application Name=GSmartControl GenericName=Hard Disk and SSD Health Inspection Comment=Monitor and control SMART data on hard disk and solid-state drives # Run with root permissions. Exec="/<GSmartControlnのインストールディレクトリ>/bin/gsmartcontrol-root" # If it's a name only, it looks for "name.[png|xpm]" file in # $XDG_DATA_DIRS/icons and /usr/share/pixmaps. # An absolute file path is also supported. Icon=/<GSmartControlnのインストールディレクトリ>/share/icons/hicolor/128x128/apps/gsmartcontrol.png Categories=System;Monitor; # Run with root permissions. This should work with newer GNOME too. # It _should_ work with kde, but it hangs on mine, so use plain kdesu. #X-KDE-SubstituteUID=true #X-KDE-RootOnly=true
ストレージの総書き込み量(TBW)の確認
SmartMonToolsを実行して、以下の項目を確認する。
- Sector Size
- Total_LBAs_Written
- Total_Writes_GiB (
Total_LBAs_Written
項目が存在しない場合) - Logical Sectors Written (
Total_Writes_GiB
項目およびTotal_LBAs_Written
項目が存在しない場合)
sudo smartctl -ax /dev/sdX | grep '\(Total_LBAs_Written\|Total_Writes_GiB\|Logical Sectors Written\|Sector Size\)'
上記で確認した値から、ストレージの総書き込み量(TBW)を求める。
ストレージのベンチマーク
fioコマンドの使用
sudo fio --loops=3 --size=1000m --filename=/mnt/fs/fiotest.tmp --stonewall --ioengine=libaio --direct=1 \ --name=Seqread --bs=4m --rw=read \ --name=Seqwrite --bs=4m --rw=write \ --name=512Kread --bs=512k --rw=randread \ --name=512Kwrite --bs=512k --rw=randwrite \ --name=4kQD32read --bs=4k --iodepth=32 --rw=randread \ --name=4kQD32write --bs=4k --iodepth=32 --rw=randwrite sudo rm -f /mnt/fs/fiotest.tmp
ベンチマーク用シェルスクリプトの使用
以下に示すリンクから、ベンチマーク用シェルスクリプトをダウンロードして、スーパユーザ権限で実行する。
このシェルスクリプトは、fio
コマンドとdf
コマンドが必要であることに注意する。
ファイル:Benchmark for NVMe.zip
KDiskMarkの使用
- パッケージ管理システムからインストールする場合
sudo zypper install kdiskmark
- ソースコードからインストール場合
- KDiskMarkのビルドに必要なライブラリをインストールする。
sudo zypper install cmake extra-cmake-modules libQt5Core-devel libQt5DBus-devel libQt5Widgets-devel libQt5Network-devel libqt5-linguist libqt5-linguist-devel \
libpolkit-qt5-1-devel libaio-devel libbfio-devel
- KDiskMarkのGithubにアクセスして、ソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf kdiskmark-<バージョン>
cd kdiskmark-<バージョン>
- KDiskMarkをビルドおよびインストールする。
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release --DCMAKE_INSTALL_PREFIX=<KDiskMarkのインストールディレクトリ> ..
make -j $(nproc)
make install
ブロックデバイスの暗号化
Linuxカーネルは、ブロックデバイスごと、および、作成済みのファイルシステムを暗号化する機能をサポートしている。
ブロックデバイスごとに暗号化する機能には、cryptsetup
コマンドやcryptmount
コマンド等を使用する。
作成済みのファイルシステムを暗号化するには、eCryptfs
やEncFS
等を使用する。
暗号化パーティションの作成
以下の例では、/dev/sdc4パーティションに対して、cryptsetupを使用して暗号化パーティションを作成している。
sudo cryptsetup luksFormat /dev/sdXY # 出力例 WARNING! ======== This will overwrite data on /dev/sdc4 irrevocably. Are you sure? (Type uppercase yes): YES Enter passphrase for /dev/sdc4: # パスワードを入力する Verify passphrase: # 再度パスワードを入力する
初期化したLUKSパーティションをマッピング
sudo cryptsetup luksOpen /dev/sdXY <マッピング名>
暗号化されたパーティションをフォーマット(初回のみ)
sudo mkfs.<ファイルシステムの種類> <マッピング先のディレクトリ> # 例 sudo mkfs.ext4 <マッピング先のディレクトリ>
マウント
sudo mount <マッピング先のディレクトリ> <マウント先のディレクトリ>
暗号化したデバイスを削除
# アンマウント sudo umount <マウント先のディレクトリ> # LUKSパーティションの削除 sudo cryprsetup luksClose <マッピング名>
再度LUKSパーティションを作成する
LUKSパーティションを作成して、マウントする。(最初に設定したパスワードを入力する)
フォーマットする必要はない。(データが全て削除されてしまうため注意すること)
# X : ストレージ番号 # Y : パーティション番号 sudo cryptsetup luksOpen /dev/sdXY <マッピング名> sudo mount <マッピング先のディレクトリ> <マウント先のディレクトリ>
エラー関連
ファイルおよびディレクトリの削除
バックアップディレクトリ等を削除する時、以下のようなエラーが発生する場合がある。(ext4で確認済み)
rm: cannot remove '<ファイル名またはディレクトリ名>': Read-only file system
この時、ファイルシステムを読み書き可能な状態に再マウントする。
sudo mount -o remount,rw /run/media/<ユーザ名>/<ストレージのラベル名>
再マウントする時に、以下に示すようなエラーが出力される場合がある。
... read-write, is write-protected ...
この時、ファイルシステムを復元する。
# Xはストレージ番号 # Yはパーティション番号 sudo fsck /dev/sdXY