2018年11月19日月曜日

raspberry pi : USB HDD の接続

目的:
USB HDD を接続/マウントする。

手順:
  1. USB ポートに USB HDD を接続する。
  2. USB HDD を 確認。
    sudo fdisk -l
    で、USB HDD が接続されていることを確認する。
    (出力例)
    Device     Boot Start      End  Sectors  Size Id Type
    /dev/sdb1        2048 40079087 40077040 19.1G 83 Linux
  3. USB HDD のフォーマットを行う。(必要ならば)
    1) パーティションの設定を行う。
    sudo fdisk /dev/sdb
    コマンド
    d : パーティション削除
    p : 現在の状態を確認
    n : パーティション作成
    w : 書き込み
    2) ext4 でフォーマットを行う。
    sudo mkfs.ext4 /dev/sdb1
  4. マウントする。
    1) マウントポイントを作る。
    sudo mkdir /mnt/hdd2
    sudo chmod 777 /mnt/hdd2
    2) UUID を確認
    sudo blkid /dev/sdb1
    3) fstab にマウント設定を追加
    sudoedit /etc/fstab
    で、
    UUID="**********" /mnt/hdd2    ext4  defaults,nofail  0  0
    を追加 (********** は、確認した UUID)
    4) リブートする
    sudo reboot
  5. 一定時間アクセスが無い場合にスピンダウンする。
    1) スピンダウン用のソフトウェアをインストールする。(2種)
    sudo apt-get install sdparm
    sudo apt-get install hdparm
    (hdparm は既にインストール済みだった)
    2) どちらのコマンドでスピンダウンするか確認する。
    sudo sdparm -r --command=stop /dev/sdb1
    sudo hdparm -y /dev/sdb1
    のどちらでスピンダウンするか確認する。
    —— 今回は、sdparm の方しかスピンダウンしなかった。
    3) スピンダウンのコマンドを常駐化させる。
    3-1) スクリプトファイルを作成する。
    下記の内容のスクリプトファイルを /root/hdd_spindown.sh で作成し、
    /root/hdd_spindown.shのパーミッションを700に変更する。
    sudoedit /root/hdd_spindown.sh
    #!/bin/sh
     
    if [ $# -lt 2 ]; then
            echo "not enough arguments supplied."
            echo "hdd_spindown.sh [UUID] [INTERVAL]"
            exit 0
    fi
     
    disk=`findfs UUID="$1"`
    interval=$2
     
    count=$interval
    up=1
     
    if [ -z $disk ]; then
            #echo "findfs error"
            exit 1
    fi
     
    disk=`echo "$disk" |sed -e "s@/dev/@@"`
     
    state=`grep " $disk " /proc/diskstats`
     
    while [ true ]; do
            sleep 10
            count=$(($count-10))
            newstate=`grep " $disk " /proc/diskstats`
            if [ "$state" = "$newstate" ]; then
                    if [ $count -lt 0 ]; then
                            count=$interval
                            if [ $up = 1 ]; then
                                    #echo -e "spin-down"
                                    sync
                                    state=`grep " $disk " /proc/diskstats`
    
    #次のどちらかを記述
    # hdparmを利用するとき
                                    hdparm -y /dev/$disk > /dev/null 2>&1
    # sdparmを利用するとき
                                    sdparm --command=stop -r /dev/$disk > /dev/null 2>&1
    
                                    up=0
                            fi
                    fi
            else
                    #echo -e "drive is up"
                    count=$interval
                    state="$newstate"
                    up=1
            fi
    done
    

    sudo chmod 700 /root/hdd_spindown.sh
    3-2) マウントされている対象のデバイスのUnit名を確認する
    systemctl list-units| grep -F .mount
    3-3) /lib/systemd/system/user_hdd2_spindown.service を下記の内容で作成
    sudoedit /lib/systemd/system/user_hdd2_spindown.service
    [Unit]
    Description=hdd spindown by sdparm
    After=(先ほど、確認したUnit名)
     
    [Service]
    ExecStart=/root/hdd_spindown.sh (USBHDDのUUID) (直近のアクセスからスピンダウンまでの時間(秒)) > /dev/null 2>&1
    KillMode=process
    Type=simple
    Restart=no
     
    [Install]
    WantedBy=multi-user.target
    
    3-4) スクリプトが起動時に動作するように設定
    sudo systemctl enable user_hdd2_spindown.service



0 件のコメント:

コメントを投稿