■3TBのデータディスクを増設してみた。
古いハードディスクマウンタを切り分けたときの
kernelの認識と報告されたハードディスク情報の差異の記録。
3TBというサイズのHDDも古くない?というツッコミにはここでは触れない。
$ lsb_release -d
Description: Debian GNU/Linux 9.4 (stretch)
■Kernelの認識は747GiB。
$ sudo dmesg | grep sdb
[143777.577717] sd 6:0:0:0: [sdb] 1565565872 512-byte logical blocks: (802 GB/747 GiB)
[143777.578113] sd 6:0:0:0: [sdb] Write Protect is off
[143777.578123] sd 6:0:0:0: [sdb] Mode Sense: 21 00 00 00
[143777.578519] sd 6:0:0:0: [sdb] No Caching mode page found
[143777.578534] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[143777.631969] sdb:
[143777.633420] sd 6:0:0:0: [sdb] Attached SCSI disk
■ディスクの認識は正常
$ ls -l /dev/disk/by-id/* | grep sdb\$
lrwxrwxrwx 1 root root 9 7月 3 01:25 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F2R540 -> ../../sdb
lrwxrwxrwx 1 root root 9 7月 3 01:25 /dev/disk/by-id/wwn-0x5000c50050410a64 -> ../../sdb
$ sudo hdparm -I /dev/sdb | grep size
Logical Sector size: 512 bytes
Physical Sector size: 4096 bytes
device size with M = 1024*1024: 2861588 MBytes
device size with M = 1000*1000: 3000592 MBytes (3000 GB)
cache/buffer size = unknown
■バルクディスクなのでシールに「AF」のマークがあるのも確認できる。
アドバンスト・フォーマット
https://toshiba.semicon-storage.com/jp/product/storage-products/trends-technology/advanced-format.html
■物理セクタサイズの報告がおかしい。
AFT(Advanced Format 512e)を無視して746.5Gしか認識していない。
$ find /sys/class/block/sdb/queue/ -type f -name "[lp]*size" | grep . `xargs`
/sys/class/block/sdb/queue/physical_block_size:512
/sys/class/block/sdb/queue/logical_block_size:512
$ sudo lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 746.5G 0 disk
■KernelのEFIサポートは有効になっている。
$ sudo apt-get install -y kernel-package
$ grep EFI /usr/share/kernel-package/Config/config.$(uname -r | awk -F\- '{print $NF}')
CONFIG_EFI_PARTITION=y
■sdaもAFTなので問題ないはず。
$ sudo fdisk -l /dev/sda | grep ^Sec
Sector size (logical/physical): 512 bytes / 4096 bytes
$ sudo fdisk -l /dev/sdb | grep ^Sec
Sector size (logical/physical): 512 bytes / 512 bytes
$ sudo blockdev --getpbsz /dev/sda
4096
$ sudo blockdev --getpbsz /dev/sdb
512
■ブロック数から算出しても確かに746.52GiBしか認識していない。
$ cat /proc/partitions
major minor
8 0 488386584 sda
8 1 291840 sda1
8 2 31250432 sda2
8 3 58593280 sda3
8 4 202930176 sda4
8 5 195318784 sda5
8 16 782782936 sdb
$ awk '/sdb/{print $(NF-1)/1024/1024"GiB"}' /proc/partitions
746.52GiB
■セクタサイズも、ファイルサイズも同じ。
$ echo $(cat /sys/class/block/sdb/size) $(sudo blockdev --getsize /dev/sdb) | awk '{if($1==$2){print $1"="$2}}'
1565565872=1565565872
$ echo $(sudo blockdev --getsize64 /dev/sdb) | awk '{print $1/1024/1024/1024"GiB"}'
746.52GiB
■テストもパスするので、やはりHWの異常や認識の誤りでは無い。
$ apt-file search bin/smartctl
smartmontools: /usr/sbin/smartctl
$ sudo smartctl -H /dev/sdb
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.9.0-6-amd64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
$ sudo smartctl --info /dev/sdb | grep "^User\|^Sector"
User Capacity: 3,000,592,982,016 bytes [3.00 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
■PC側の挿入口が青い3.0の1箇所を含めて計4箇所のUSBポートに繋げても同じ。
USBケーブルのポートが黒、USB2.0モデルのハードディスクマウンタが古すぎるのか?
$ sudo lsusb | awk '/hub/'
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
■そうでした。ハードディスクマウンタが古すぎました。
USBケーブルのポートが青、USB3.0モデルのハードディスクのマウンタを購入して接続
$ sudo dmesg | grep sdb | tail -7
[234153.746023] sd 6:0:0:0: [sdb] 5860533168 512-byte logical blocks: (3.00 TB/2.73 TiB)
[234153.746028] sd 6:0:0:0: [sdb] 4096-byte physical blocks
[234153.746452] sd 6:0:0:0: [sdb] Write Protect is off
[234153.746458] sd 6:0:0:0: [sdb] Mode Sense: 43 00 00 00
[234153.746618] sd 6:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[234153.800960] sdb:
[234153.802079] sd 6:0:0:0: [sdb] Attached SCSI disk
$ ls -l /dev/disk/by-id/* | grep sdb\$
lrwxrwxrwx 1 root root 9 7月 5 20:42 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F2R540 -> ../../sdb
lrwxrwxrwx 1 root root 9 7月 5 20:42 /dev/disk/by-id/wwn-0x5000c50050410a64 -> ../../sdb
$ sudo hdparm -I /dev/sdb | grep size
Logical Sector size: 512 bytes
Physical Sector size: 4096 bytes
device size with M = 1024*1024: 2861588 MBytes
device size with M = 1000*1000: 3000592 MBytes (3000 GB)
cache/buffer size = unknown
$ find /sys/class/block/sdb/queue/ -type f -name "[lp]*size" | grep . `xargs`
/sys/class/block/sdb/queue/physical_block_size:4096
/sys/class/block/sdb/queue/logical_block_size:512
$ sudo lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 2.7T 0 disk
$ sudo fdisk -l /dev/sdb | grep ^Sec
GPT PMBR size mismatch (1565565871 != 5860533167) will be corrected by w(rite).
Sector size (logical/physical): 512 bytes / 4096 bytes
$ sudo blockdev --getpbsz /dev/sdb
4096
$ cat /proc/partitions
major minor #blocks name
8 0 488386584 sda
8 1 291840 sda1
8 2 31250432 sda2
8 3 58593280 sda3
8 4 202930176 sda4
8 5 195318784 sda5
8 16 2930266584 sdb
$ awk '/sdb/{print $(NF-1)/1024/1024"GiB"}' /proc/partitions
2794.52GiB
$ echo $(cat /sys/class/block/sdb/size) $(sudo blockdev --getsize /dev/sdb) | awk '{if($1==$2){print $1"="$2}}'
5860533168=5860533168
$ echo $(sudo blockdev --getsize64 /dev/sdb) | awk '{print $1/1024/1024/1024"GiB"}'
2794.52GiB
$ sudo smartctl -H /dev/sdb
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.9.0-6-amd64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
$ sudo smartctl -i /dev/sdb | \
awk -F\: '{if($1=="Serial Number"||$1=="LU WWN Device Id"){printf "%-18sXXXXXX\n",$1":"}else{print}}'
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.9.0-6-amd64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda 7200.14 (AF)
Device Model: ST3000DM001-1CH166
Serial Number: XXXXXX
LU WWN Device Id: XXXXXX
Firmware Version: CC26
User Capacity: 3,000,592,982,016 bytes [3.00 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: 7200 rpm
Form Factor: 3.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS T13/1699-D revision 4
SATA Version is: SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Thu Jul 5 21:08:01 2018 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
■ということであとは普通にフォーマットするのだけど。。。
$ sudo parted /dev/sdb print
Model: ASMT 2115 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
$ sudo parted /dev/sdb mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
Information: You may need to update /etc/fstab.
■partedが報告する3001GBと「0でなく0%」というgoogle先生のナレッジでも警告が出る。
$ sudo parted /dev/sdb "mkpart primary ext4 0% 3001GB"
Warning: You requested a partition from 0.00B to 3001GB (sectors 0..5860533167).
The closest location we can manage is 17.4kB to 33.6MB (sectors 34..65534).
Is this still acceptable to you?
Yes/No? Yes
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Cancel
■計算してみると「65535」。fdiskでもそう報告している。
$ awk '{print ($0+0)/512}' /sys/block/sdb/queue/optimal_io_size
65535
$ sudo fdisk -l /dev/sdb | grep -B 1 ^/
Device Start End Sectors Size Type
/dev/sdb1 65535 5860532909 5860467375 2.7T Linux filesystem
Partition 1 does not start on physical sector boundary.
$ sudo parted /dev/sdb "mkpart primary ext4 65535s 100%"
Information: You may need to update /etc/fstab.
$ sudo parted /dev/sdb "print"
Model: ASMT 2115 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 33.6MB 3001GB 3001GB primary
$ sudo fdisk -l /dev/sdb | grep -B 1 ^/
Partition 1 does not start on physical sector boundary.
Device Start End Sectors Size Type
/dev/sdb1 65535 5860532909 5860467375 2.7T Linux filesystem
$ sudo mkfs /dev/sdb1 | awk -F\: '{if($1=="Filesystem UUID"){printf "%-18sXXXXXX\n",$1":"}else{print}}'
mke2fs 1.43.4 (31-Jan-2017)
/dev/sdb1 alignment is offset by 512 bytes.
This may result in very poor performance, (re)-partitioning suggested.
Creating filesystem with 732558421 4k blocks and 183140352 inodes
Filesystem UUID: 9762df53-d940-4a9b-bead-bc550aaf2e9c
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
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
$ sudo mount /dev/sdb1 /media/sdb1
$ env LANG=C df -h | grep "File\|sdb"
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 2.7T 73M 2.6T 1% /media/sdb1