設定 - ストレージ

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動

概要

ここでは、ストレージのマウント方法および再マウント方法を記載する。


ストレージのマウント

アタッチした追加ストレージの情報を確認する。

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

  • ソースコードからインストール
    1. GNUの公式Webサイトにあるddrescureページにアクセスして、ソースコードをダウンロードする。
    2. ダウンロードしたファイルを解凍する。
      tar xf ddrescue-<バージョン>.tar.lz
      cd ddrescue-<バージョン>
    3. ビルドディレクトリを作成する。
      mkdir build && cd build
    4. ddrescueをビルドおよびインストールする。
      ../configure --prefix=<ddrescueのインストールディレクトリ>
      make -j $(nproc)
      make install


故障および故障寸前のストレージをクローンする場合は、ddrescueコマンドを2回実行する。

  1. まず、読み取りエラーが存在しないブロックを全てコピーして、エラーをファイルにマッピングする。
    sudo ddrescue -n <クローン元のストレージ> <クローン先のストレージ> <エラーをマッピングするファイル>
    例 : sudo ddrescue -n /dev/sdX /dev/sdY ~/rescue1.map

  2. 次に、クローンされるデータの読み込みを3回試行して、不良ブロックのみをクローンする。
    もし、読み込みできない場合は、該当ブロックのデータはクローンしない。
    sudo ddrescue -d -r3 <クローン元のストレージ> <クローン先のストレージ> <エラーをマッピングするファイル>
    例 : sudo ddrescue -d -r3 /dev/sdX /dev/sdY ~/rescue2.map

  3. クローン先のストレージのファイルシステムが正常かどうかを確認する。
    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を後方に移動する必要がある。

Storage Clone GParted 1.png


  1. まず、Partition 3を後方に移動する。
    GPartedを起動して、[パーティション]メニューバー - [リサイズ/移動]を選択する。
    または、移動するパーティションを右クリックして、[リサイズ/移動]を選択する。
  2. 警告アラートが出力される場合は、[OK]ボタンを押下する。
  3. [リサイズ/移動]画面が開くので、画面上部のグラフを右端までドラッグする。
    [後方の空き領域]項目が0になっていることを確認して、[リサイズ/移動]ボタンを押下する。

  4. 次に、Partition 2をリサイズする。
    GPartedの[パーティション]メニューバー - [リサイズ/移動]を選択する。
    または、リサイズするパーティションを右クリックして、[リサイズ/移動]を選択する。
  5. 警告アラートが出力される場合は、[OK]ボタンを押下する。
  6. [リサイズ/移動]画面が開くので、画面上部のグラフを右端までドラッグする。
    [後方の空き領域]項目が0になっていることを確認して、[リサイズ/移動]ボタンを押下する。
  7. これにより、Partition 2と未割り当て領域が隣接状態となる。

  8. 再度、Partiton 2を右クリックして、[リサイズ/移動]を選択する。
  9. 警告アラートが出力される場合は、[OK]ボタンを押下する。
  10. [リサイズ/移動]画面が開くので、画面上部のグラフを右端までドラッグする。
    [後方の空き領域]項目が0になっていることを確認して、[リサイズ/移動]ボタンを押下する。

  11. GPartedの画面下部に、上記の操作が表示されているので確認する。
  12. GPartedの画面上部にある[✓]ボタンを押下する。
    最終確認アラートが表示されるので、[Apply]ボタンを押下する。
  13. 処理の完了後、エラーメッセージが出力されているかどうかを確認する。



ストレージの総書き込み量(TBW)

SmartMonToolsのインストール

まず、SmartMonToolsをインストールする。

  • パッケージ管理システムからインストールする場合
    1. sudo zypper install smartmontools

  • ソースコードからインストールする場合
    1. SmartMonToolsのGithubからソースコードをダウンロードする。
    2. ダウンロードしたファイルを解凍する。
      tar xf smartmontools-<バージョン>.tar.gz
      cd smartmontools-<バージョン>.tar.gz
    3. ビルドディレクトリを作成する。
      mkdir build && cd build
    4. 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をインストールしてもよい。

  • パッケージ管理システムからインストールする場合
    1. sudo zypper install gsmartcontrol

  • ソースコードからインストールする場合
    1. GSmartControlのビルドに必要なライブラリをインストールする。
      sudo zypper install pcre-devel gtk3-devel gtkmm3-devel

    2. GSmartControlの公式WebサイトまたはGSmartControlのGithubからソースコードをダウンロードする。
    3. ダウンロードしたファイルを解凍する。
      tar xf gsmartcontrol-<バージョン>.tar.gz
      cd gsmartcontrol-<バージョン>.tar.gz
    4. ビルドディレクトリを作成する。
      mkdir build && cd build
    5. GSmartControlをビルドおよびインストールする。
      ../configure --prefix=<GSmartControlのインストールディレクトリ>
      make -j $(nproc)
      make install

    6. GSmartControlのPolKitポリシーファイルを作成する。
      sudo vi /usr/share/polkit-1/actions/org.gsmartcontrol-UserAdd.policy


 # /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コマンド等を使用する。
作成済みのファイルシステムを暗号化するには、eCryptfsEncFS等を使用する。

暗号化パーティションの作成

以下の例では、/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