外付けHDDのファイルシステムをLinuxマシンで変更する方法
LinuxマシンへのGMTのインストール
rsyncコマンドを使ったファイル転送(ファイル同期)

外付けHDDのファイルシステムをLinuxマシンで変更する方法

はじめに

 市販の外付けHDDのファイルシステムを変更したい場合、容量が2TB以下であれば従来通りにfdiskというコマンドが使えますが、2TB以上の場合は、partedというコマンドを使用する必要があります。
 以下では、I・Oデータ社製HDJA-UTRWシリーズの8TBの外付けHDDのファイルシステムを、Linuxマシン(OS: AlmaLinux 8)上でLinuxファイルシステム(ext4)に変更する場合の手順の覚え書きを紹介します。rootでログインして作業を行ってください。

パーティションの初期化

 su -でログインする。
 外付けHDDをマシンに接続したあと、df -hでマウントされているか確認する。
[root@xxx user_name]# 
df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda3 923G 30G 894G 4% / devtmpfs 47G 0 47G 0% /dev tmpfs 47G 33M 47G 1% /dev/shm tmpfs 47G 27M 47G 1% /run tmpfs 47G 0 47G 0% /sys/fs/cgroup /dev/sdc 9.1T 282M 9.1T 1% /home /dev/sda1 485M 196M 290M 41% /boot tmpfs 9.3G 40K 9.3G 1% /run/user/1002 /dev/sdd 7.3T 319M 7.3T 1% /run/media/yoshida/HDJA-UT (←ここ)
 parted -lでパーティションの初期状態を確認する。
[root@xxx user_name]# 
parted -l
…(マシンに付いている他のディスクの情報が長々と表示された後、最後に) Model: I-O DATA HDJA-UT (scsi) Disk /dev/sdd: 8002GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 134MB 134MB Microsoft reserved partition msftres 2 135MB 8002GB 8001GB
ntfs
Basic data partition msftdata
「File system」が「ntfs」であることに注意。

次に、mklabelでラベル(パーティションの管理方式)をGPT(GUID Partition Table)に設定する。
[root@xxx user_name]# 
parted /dev/sdd
GNU Parted 3.1 Using /dev/sdd Welcome to GNU Parted! Type 'help' to view a list of commands. (parted)
mklabel gpt
Warning: Partition(s) on /dev/sdd are being used. Ignore/Cancel?
I
 (←警告が出るが無視) Warning: The existing disk label on /dev/sdd will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No?
Y
Error: Partition(s) 2 on /dev/sdd have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes. Ignore/Cancel?
I
 (←警告が出るが無視) (parted)
q
Information: You may need to update /etc/fstab.

新しいパーティションの作成

もう一度partedコマンドを実行。
[root@xxx user_name]# 
parted /dev/sdd
GNU Parted 3.2 Using /dev/sdd Welcome to GNU Parted! Type 'help' to view a list of commands. (parted)
mkpart
Partition name? []?
primary
 (←名前は何でも良い) File system type? [ext2]?
ext4
Start?
0%
End?
100%
Error: Error informing the kernel about modifications to partition /dev/sdd1 -- Device or resource busy. This means Linux won't know about any changes you made to /dev/sdd1 until you reboot -- so you shouldn't mount it or use it in any way before rebooting. Ignore/Cancel?
I
 (←警告が出るが無視) Error: Partition(s) 2 on /dev/sdd have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes. Ignore/Cancel?
I
 (←警告が出るが無視) (parted)
q
Information: You may need to update /etc/fstab.
 parted -lで、パーティションのサイズや名前が合っているか確認する。この時点では、まだext4でフォーマットされていないので「ファイルシステム」には何も表示されない。
[root@xxx user_name]# 
parted -l
…(マシンに付いている他のディスクの情報が長々と表示された後、最後に) Model: I-O DATA HDJA-UT (scsi) Disk /dev/sdd: 8002GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 134MB 134MB Microsoft reserved partition msftres 2 135MB 8002GB 8001GB Basic data partition msftdata
「File system」が空白になっていればOK。

フォーマット

 ext4でフォーマットを開始しようとするが…、
[root@xxx user_name]# 
mkfs -t ext4 /dev/sdd
/dev/sdd is entire device, not just one partition! Proceed anyway? (y,n)
y
/dev/sdd is apparently in use by the system; will not make a filesystem here!
 以上のように表示されて、マウントしたままではフォーマットできないので、一旦外付けHDDをアンマウントする。
[root@xxx user_name]# 
umount /run/media/user_name/HDJA-UT
 df -hでアンマウントされているか確認する。
[root@xxx user_name]$ 
df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda3 923G 30G 894G 4% / devtmpfs 47G 0 47G 0% /dev tmpfs 47G 96M 47G 1% /dev/shm tmpfs 47G 27M 47G 1% /run tmpfs 47G 0 47G 0% /sys/fs/cgroup /dev/sdc 9.1T 281M 9.1T 1% /home /dev/sda1 485M 196M 290M 41% /boot tmpfs 9.3G 40K 9.3G 1% /run/user/1002
 外付けHDDをマシンから外した後、再び外付けHDDをマシンに接続し、parted -lでパーティションを確認する。
[root@xxx user_name]# 
parted -l
…(マシンに付いている他のディスクの情報が長々と表示された後、最後に) Model: I-O DATA HDJA-UT (scsi) Disk /dev/sdd: 8002GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 134MB 134MB Microsoft reserved partition msftres 2 135MB 8002GB 8001GB Basic data partition msftdata
 もう一度、ext4でフォーマットの開始を試みる。
[root@xxx user_name]# 
mkfs -t ext4 /dev/sdd
mke2fs 1.42.9 (28-Dec-2013) /dev/sdd is entire device, not just one partition! Proceed anyway? (y,n)
y
Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 244191232 inodes, 1953506646 blocks 97675332 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4102029312 59617 block groups 32768 blocks per group, 32768 fragments per group 4096 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544, 1934917632 Allocating group tables:
done
Writing inode tables:
done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information:
done
 「done」が出ればフォーマットは成功。parted -lでパーティションを確認する。
[root@xxx user_name]# 
parted -l
…(マシンに付いている他のディスクの情報が長々と表示された後、最後に) Model: I-O DATA HDJA-UT (scsi) Disk /dev/sdd: 8002GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 134MB 134MB Microsoft reserved partition msftres 2 135MB 8002GB 8001GB
ext4
Basic data partition msftdata

マウント

 次に、自分のアカウント(user_name)のhome領域に作成したディレクトリ(newhdd)に、外付けHDDをマウントする。
[root@xxx user_name]# 
mkdir newhdd
[root@xxx user_name]#
mount /dev/sdd /home/user_name/newhdd
 df -hできちんとマウントされているか確認する。
[root@xxx user_name]# 
df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda3 923G 30G 894G 4% / devtmpfs 47G 0 47G 0% /dev tmpfs 47G 96M 47G 1% /dev/shm tmpfs 47G 27M 47G 1% /run tmpfs 47G 0 47G 0% /sys/fs/cgroup /dev/sdc 9.1T 282M 9.1T 1% /home /dev/sda1 485M 196M 290M 41% /boot tmpfs 9.3G 40K 9.3G 1% /run/user/1002 /dev/sdd 7.3T 93M 6.9T 1% /home/user_name/newhdd
 newhddに入って、「lost+found」以外、ディレクトリの中に何もファイルがないことを確認する。
[root@xxx user_name]# 
cd newhdd
[root@xxx newhdd]#
ls
. .. lost+found
 引き続き、マウントした外付けHDDにデータを書き込みたいときは、そのまま作業をすすめる。その際、newhddに書き込みの許可を与える。
[root@xxx user_name]# 
chmod a+w newhdd
 データを書き込まず一旦アンマウントして、外付けHDDを外したい場合は、newhddから出てアンマウントする。
[root@xxx newhdd]# 
umount /home/user_name/newhdd
umount: /home/yoshida/newhdd: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) [root@xxx newhdd]#
cd ..
[root@xxx user_name]#
umount /home/user_name/newhdd
 以上で終了。

LinuxマシンへのGMTのインストール

はじめに

 Linuxコンピューターに、地球科学で広く使われる作図ソフトである「Generic Mapping Tools (GMT)」をインストールする際の覚え書きです。
 以下は、Rocky Linux 8(CentOS 8のサポート終了を受けて誕生した、Red Hat Enterprise Linux (RHEL)と完全互換性を持つオープンソースのディストリビューション)にGMTをインストールした例です。

NetCDFとGDALのインストール

 GMTをインストールする前に、NetCDFGDALをインストールする必要があります。
 rootでログインし、以下のコマンドを実行します。
[root@xxx gmt]# sudo dnf install netcdf netcdf-devel netcdf-cxx netcdf-cxx-devel netcdf-fortran netcdf-fortran-devel
[root@xxx gmt]# sudo dnf install gdal gdal-devel

GMTと付属データの最新バージョンの確認

 次に、GMTと付属データ(GSHHGとDCW)の最新バージョンをこちらのサイトで確認します。2025年2月上旬の段階では、GMT 6.5.0、GSHHG 2.3.7、DCW 2.2.0が最新バージョンです。

GMTのインストール

 次に、GMTをインストールします。ここでは、/usr/local/gmtというディレクトリを作成して、ここにインストールするとします。
 /usr/local/gmtに以下のスクリプトファイルを作成します。ファイル名はgmt_instal_gmt-6.5.0.shとします。
#!/bin/bash
sudo apt update
sudo apt upgrade -y
# 依存するパッケージをインストール
sudo apt install -y build-essential cmake libcurl4-gnutls-dev libnetcdf-dev gdal-bin libgdal-dev libfftw3-dev \
libpcre3-dev liblapack-dev libblas-dev libglib2.0-dev ghostscript  graphicsmagick ffmpeg xdg-utils
# GMT6のインストール
GMT_VERSION="6.5.0"
GSHHG_VERSION="2.3.7"
DCW_VERSION="2.2.0"
# ---
#cd /home/$USER
cd /usr/local/gmt
rm -f gmt-${GMT_VERSION}-src.tar.gz gshhg-gmt-${GSHHG_VERSION}.tar.gz dcw-gmt-${DCW_VERSION}.tar.gz
rm -rf gmt-${GMT_VERSION} gshhg-gmt-${GSHHG_VERSION} dcw-gmt-${DCW_VERSION}
wget "https://github.com/GenericMappingTools/gmt/releases/download/${GMT_VERSION}/gmt-${GMT_VERSION}-src.tar.gz"
wget "https://github.com/GenericMappingTools/gshhg-gmt/releases/download/${GSHHG_VERSION}/gshhg-gmt-${GSHHG_VERSION}.tar.gz"
wget "https://github.com/GenericMappingTools/dcw-gmt/releases/download/${DCW_VERSION}/dcw-gmt-${DCW_VERSION}.tar.gz"
# ---
tar xzvf gmt-${GMT_VERSION}-src.tar.gz
tar xzvf gshhg-gmt-${GSHHG_VERSION}.tar.gz
tar xzvf dcw-gmt-${DCW_VERSION}.tar.gz
# ---
#GSHHG_ROOT=/home/$USER/gshhg-gmt-${GSHHG_VERSION}
#DCW_ROOT=/home/$USER/dcw-gmt-${DCW_VERSION}
GSHHG_ROOT=/usr/local/gmt/gshhg-gmt-${GSHHG_VERSION}
DCW_ROOT=/usr/local/gmt/dcw-gmt-${DCW_VERSION}
# ---
cd gmt-${GMT_VERSION}
cat ./cmake/ConfigUserTemplate.cmake | \
sed -e 's%\#set (GSHHG_ROOT "gshhg_path"%'"set (GSHHG_ROOT ${GSHHG_ROOT}"'%g' | \
sed -e 's/\#set (COPY_GSHHG FALSE)/set (COPY_GSHHG TRUE)/g' | \
sed -e 's%\#set (DCW_ROOT "dcw-gmt_path"%'"set (DCW_ROOT ${DCW_ROOT}"'%g' | \
sed -e 's/\#set (COPY_DCW FALSE)/set (COPY_DCW TRUE)/g' \
> ./cmake/ConfigUser.cmake
mkdir build
cd build
sudo cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
sudo make -j4
sudo make -j4 install
 GMT、GSHHG、DCWのバージョンは最新のものに書き換えてください。
 なお、上記のスクリプトはこちらのページを参考にさせていただきました。
 次に、以下のように実行します。
[root@xxx gmt]# ./gmt_instal_gmt-6.5.0.sh
 すると、インストール作業が進みます。

GMTがインストールされたかどうかの確認

 無事にインストールできたかどうかは以下のコマンドで確認できます。
[root@xxx ~]$ gmt --version
6.5.0
 または、例えば、以下のようにすると、psxyの説明がつらつらと表示されます。
[root@xxx ~]$ gmt psxy

rsyncコマンドを使ったファイル転送(ファイル同期)

自分の計算機のアカウント@ドメインをuser@zibun.ac.jp、相手の計算機のアカウント@ドメインをuser@aite.ac.jpとする。

相手の計算機上から、自分の計算機の/home/user/dir/にデータ転送する場合
rsync -avuh --progress [移したいディレクトリ名もしくはファイル名の絶対パス] user@zibun.ac.jp:/home/user/dir
ワイルドカード*でディレクトリ名(例えば、dir0、dir1、dir2、…)を指定する場合、dir*とし、dir*/のようにスラッシュを付けないこと。

自分の計算機上で、相手の計算機の/home/user/dirのディレクトリを丸ごとデータ転送する場合
rsync -avuh --progress user@aite.ac.jp:/home/user/dir . 
自分の計算機上で、相手の計算機の/home/user/dir/にあるファイル(file)をデータ転送する場合
rsync -avuh --progress user@aite.ac.jp:/home/user/dir/file .
  • zオプション(圧縮転送)は多くの場合で高速化に寄与する場合が多いが、元から圧縮しているものに対しては、逆に遅くなるとの報告もある。実際のアウトプットファイルで効果を見積もると良い。
  • --progress オプションもscpライクに転送経過を表示するので利用しやすい。
  • rsyncには多くのオプションがあり、複雑なことを実施させようとした場合、予期せぬ挙動となる場合があるので注意。