Samsung PM953 and PM963
Fortunately, samsung properly supports nvme-cli :
# nvme id-ctrl /dev/nvme0
NVME Identify Controller:
vid : 0x144d
ssvid : 0x144d
sn :
mn : SAMSUNG MZ1LB1T9HALS-00007
fr : EDA7202Q
rab : 2
ieee : 002538
cmic : 0
mdts : 9
cntlid : 0x4
ver : 0x10200
rtd3r : 0x7a1200
rtd3e : 0x7a1200
oaes : 0
ctratt : 0
rrls : 0
cntrltype : 0
fguid :
crdt1 : 0
crdt2 : 0
crdt3 : 0
oacs : 0xf
acl : 7
aerl : 3
frmw : 0x17
lpa : 0x3
elpe : 63
npss : 0
avscc : 0x1
apsta : 0
wctemp : 359
cctemp : 360
mtfa : 0
hmpre : 0
hmmin : 0
tnvmcap : 1920383410176
unvmcap : 0
rpmbs : 0
edstt : 0
dsto : 0
fwug : 0
kas : 0
hctma : 0
mntmt : 0
mxtmt : 0
sanicap : 0
hmminds : 0
hmmaxd : 0
nsetidmax : 0
endgidmax : 0
anatt : 0
anacap : 0
anagrpmax : 0
nanagrpid : 0
pels : 0
sqes : 0x66
cqes : 0x44
maxcmd : 0
nn : 1
oncs : 0x1f
fuses : 0
fna : 0x4
vwc : 0
awun : 1023
awupf : 7
nvscc : 1
nwpc : 0
acwu : 0
sgls : 0
mnan : 0
subnqn :
ioccsz : 0
iorcsz : 0
icdoff : 0
ctrattr : 0
msdbd : 0
ps 0 : mp:8.00W operational enlat:0 exlat:0 rrt:0 rrl:0
rwt:0 rwl:0 idle_power:- active_power:-
Note: Controller ID is a field, but abbreviated as: cntlid ā¦ in our case itās 0x4.
# nvme list
/dev/nvme6n1 SAMSUNG MZ1LB1T9HALS-00007 1 0.00 B / 1.60 TB 512 B + 0 B EDA7202Q
/dev/nvme7n1 SAMSUNG MZ1LB1T9HALS-00007 1 0.00 B / 1.92 TB 512 B + 0 B EDA7202Q
So this output might seem odd. Itās not, though. The ārawā capacity of this NVMe SSD is 1.92tb. However, one is reporting as 1.6tb and the other is reporting as 1.92tb. The endurance of the 1.6tb is significantly higher than the 1.92tb one. If endurance is important to you, you can use nvme tools to change the NVMe namespace size and the controller is aware of āunprovisionedā space and will wear level accordingly. Itās a pretty cool feature of nvme. Itās kind of like short-stroking an nvme (okay, not really, but yeah kinda to an extent).
To change the namespace sizes:
# it goes without saying literally everything in this guide will destroy all the data here . . .
nvme delete-ns /dev/nvme0 --namespace-id=1
# if you had /dev/nvme0n1 after running this command that should be gone now.
# The nvme tool is not super consistent. Sometimes it reports in decimal sometimes in hex?
nvme create-ns /dev/nvme0 --nsze=$((0xdf8fe2b0)) --ncap=$((0xdf8fe2b0)) -flbas 0 -dps 0 -nmic 0
# finally attach the namespace you created, controller id comes from the previous nvme id-ctrl command...
nvme attach-ns /dev/nvme0 --namespace-id=1 --controllers=0x4
# now ls /dev/nvme0n1 should work.
1.6tb Namespace size Example:
# nvme id-ns /dev/nvme1n1
NVME Identify Namespace 1:
nsze : 0xba4d4ab0
ncap : 0xba4d4ab0
nuse : 0
nsfeat : 0x2
nlbaf : 1
flbas : 0
mc : 0
dpc : 0
dps : 0
nmic : 0
rescap : 0
fpi : 0x80
dlfeat : 0
nawun : 1023
nawupf : 7
nacwu : 0
nabsn : 1023
nabo : 0
nabspf : 7
noiob : 0
nvmcap : 1600321314816
nsattr : 0
nvmsetid: 0
anagrpid: 0
endgid : 0
nguid :
eui64 : 0000000000000000
lbaf 0 : ms:0 lbads:9 rp:0 (in use)
lbaf 1 : ms:0 lbads:12 rp:0
1.92tb Namespace size Example:
# nvme id-ns /dev/nvme0n1
NVME Identify Namespace 1:
nsze : 0x2e9352ac
ncap : 0x2e9352ac
nuse : 0x2e9352ac
nsfeat : 0x2
nlbaf : 1
flbas : 0
mc : 0
dpc : 0
dps : 0
nmic : 0
rescap : 0
fpi : 0
dlfeat : 0
nawun : 255
nawupf : 0
nacwu : 255
nabsn : 255
nabo : 0
nabspf : 0
noiob : 0
nvmcap : 400080328704
nsattr : 0
nvmsetid: 0
anagrpid: 0
endgid : 0
nguid :
eui64 :
lbaf 0 : ms:0 lbads:9 rp:0x2 (in use)
lbaf 1 : ms:0 lbads:12 rp:0x1