それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

NTFS のボリューム(HDD/SSD)をLinuxでメンテナンスする・練習する

ntfs のストレージをLinuxから操作したい

Linuxに接続してNTFSのHDD/SSDをメンテナンスしたときのメモ

使うツール

  • ntfsresize
  • ntfsfix
  • gdisk
  • losetup
  • ddrescue
  • kpartx

NTFSのディスクイメージを作る

ddrescue で取り出せばおっけ

ddrescue /dev/sda2 ntfs.img

ディスクイメージを接続する

losetup で ディスクイメージファイルを接続して通常HDD同等に扱えるようにする。

losetup -f ntfs.img
losetup -l | grep ntfs.img

空っぽのディスクイメージを使って操作する

NTFSの操作の練習のために、空っぽのディスクイメージを作って練習する

次のようにして実験用の環境を作ることができた。

truncate -s 5G ntfs.img
sudo sgdisk -Z ntfs.img
sudo sgdisk -n "0::+1G" ntfs.img
sudo sgdisk -p  ntfs.img
sudo sgdisk -t 1:0700  ntfs.img
sudo sgdisk -p  ntfs.img
sudo losetup -f --show ntfs.img
sudo kpartx -a  /dev/loopX
sudo ls /dev/mapper/loop
sudo mkfs.ntfs /dev/mapper/loopXp1

/dev/loopX は毎回変わるので注意

後片付け

sudo kpartx -d /dev/loop0
sudo losetpup -d /dev/loop0

マウントする

マウントする。 /dev/loopX は losetup している場合

# シンプルボリュームにした場合
mount -t  ntfs /dev/loopX  /mnt
# partitionを作った場合
mount -t  ntfs /dev/mapper/loopXpN  /mnt

losetup をmount と同時にやる

mount -t ntfs -o loop ntfs.img /mnt

NTFSのチェック

ntfsresize のコマンドにチェック機能があるので、NTFSのディスクチェックに使える。

sudo ntfsresize -c /dev/loopX
# または 
sudo ntfsresize -c /dev/mapper/loopXp1

info の表示でもチェックは走るみたい

sudo ntfsresize -i /dev/loop10

NTFS リサイズ

sudo ntfsresize -n -v -x  /dev/loop10

やった結果(正常終了)

takuya@:~$ sudo ntfsresize -f /dev/loop10
ntfsresize v2017.3.23AR.3 (libntfs-3g)
Device name        : /dev/loop10
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 511411470848 bytes (511412 MB)
Current device size: 511411471360 bytes (511412 MB)
New volume size    : 511411470848 bytes (511412 MB)
Nothing to do: NTFS volume size is already OK.

やった結果(エラー時)

実際にやってみた結果。CHKDSKで修正が必須らしいです。CHKDSKWindowsのコマンドなのでLinuxでは修復ができないのかもしれない。

takuya@:~$ sudo ntfsresize -n -i /dev/loop10
ntfsresize v2017.3.23AR.3 (libntfs-3g)
Device name        : /dev/loop10
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 511411470848 bytes (511412 MB)
Current device size: 511411471360 bytes (511412 MB)
Checking filesystem consistency ...
Cluster 16521360 is referenced multiple times!
Cluster 16521361 is referenced multiple times!
100.00 percent completed
ERROR: Filesystem check failed!
ERROR: 2452 clusters are referenced multiple times.
NTFS is inconsistent. Run chkdsk /f on Windows then reboot it TWICE!
The usage of the /f parameter is very IMPORTANT! No modification was
and will be made to NTFS by this software until it gets repaired.

NTFS の修正

-n をつけて調査だけしたあとにオプションを外して書き込みをする

sudo ntfsfix -n -b -d /dev/loopX
sudo ntfsfix -b -d /dev/loopX
takuya@:~$ sudo ntfsfix -b -d /dev/loop0
Mounting volume... OK
Processing of $MFT and $MFTMirr completed successfully.
Checking the alternate boot sector... OK
NTFS volume version is 3.1.
Going to un-mark the bad clusters ($BadClus)... No bad clusters...OK
NTFS partition /dev/loop0 was processed successfully.

NTFSのリサイズ(縮小・拡大)

sudo ntfsresize -s 1G /dev/loop0

CHKDSK が要求される場合

ntfsfix を試す

sudo ntfsfix /dev/loop0
sudo ntfsresize -s 1G /dev/loop0

データ破損を覚悟して forcesする

sudo ntfsresize -s 1G --force /dev/loop0

パーティションサイズとNTFSのサイズが合わない場合

NTFSは、パーティションサイズとNTFSのサイズが一致している必要がありWindowsで認識できない。Cドライブで不一致を起こすと起動失敗してBSoDになる。

Successfully resized NTFS on device '/dev/mapper/loop0p1'.
You can go on to shrink the device for example with Linux fdisk.
IMPORTANT: When recreating the partition, make sure that you
  1)  create it at the same disk sector (use sector as the unit!)
  2)  create it with the same partition type (usually 7, HPFS/NTFS)
  3)  do not make it smaller than the new NTFS filesystem size
  4)  set the bootable flag for the partition if it existed before
Otherwise you won't be able to access NTFS or can't boot from the disk!
If you make a mistake and don't have a partition table backup then you

ext4 ならresize2fs を実行すればいいが、NTFSには適切なコマンドが無いので、gdisk を使ってセクタサイズとボリュームサイズを計算しパーティション修正を頑張る。根性で。

partedでも可能だが自動にやってくれるわけじゃない。基本的に経験と勘と気合と根性の4K作業です。(計算方法さえ知ってれば大丈夫)tune2fsやresize2fs のようなものはない。

gdisk で修正すると、パーティションのUUIDが変わってしまうのでNTFSがCドライブのならWindowsのライセンス認証が無効になる。

かんたんな修正方法

パーティションサイズの修正には、すごく簡単な方法がある。

GPartedを起動してOKを押す。

GPatedの起動時のパーティションチェックで修正すれば簡単です。

GPartedをつかえば、ddイメージのGPT自体がおかしくなったときにも対応可能ですし、GPartedが楽だと思う。

CHKDSK がない

chkdsk /f を掛けろとメッセージが出てくるのだが、それに相当するコマンドがどれかわからなかったので、最悪の場合ではWindowsを持ち出してきてCHKDSKをまわすしか無いと思う。

NTFSの利点

Linuxext4NTFSを比較したとき、最大のメリットは「ファイル名の最大文字数」です。

巷にはファイルシステムを比較したとかでパフォーマンスの記事が溢れていますが、ファイル名の最大長に触れた記事は殆どありませんね。記事を見てもメンテナンスをしたりとかディスク交換したりとか、そういう記事は見当たりませんよね。誰も使い込んでないんですよ。なので今回は、NTFSのメンテナンスをLinuxからする場合に着目してまとめてみた。NASのデータをNTFSmにしておけば、最悪の場合Windowsでマウントできるので、便利だと思うんですよね。

LinuxのカーネルにNTFSが取り込まれたので、そろそろ常用していいんじゃないかと思ったんですが。LinuxNTFSを常用するのはまだ茨の道なので少し覚悟が必要ですね。