[Bug 2079836] Re: libnvme reports incorrect LBA count on drives with 4k sectors
Timo Aaltonen
2079836 at bugs.launchpad.net
Fri Feb 7 15:56:19 UTC 2025
Hello Walter, or anyone else affected,
Accepted libnvme into noble-proposed. The package will build now and be
available at https://launchpad.net/ubuntu/+source/libnvme/1.8-3ubuntu1
in a few hours, and then in the -proposed repository.
Please help us by testing this new package. See
https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how
to enable and use -proposed. Your feedback will aid us getting this
update out to other Ubuntu users.
If this package fixes the bug for you, please add a comment to this bug,
mentioning the version of the package you tested, what testing has been
performed on the package and change the tag from verification-needed-
noble to verification-done-noble. If it does not fix the bug for you,
please add a comment stating that, and change the tag to verification-
failed-noble. In either case, without details of your testing we will
not be able to proceed.
Further information regarding the verification process can be found at
https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in
advance for helping!
N.B. The updated package will be released to -updates after the bug(s)
fixed by this package have been verified and the package has been in
-proposed for a minimum of 7 days.
** Changed in: libnvme (Ubuntu Noble)
Status: In Progress => Fix Committed
** Tags added: verification-needed verification-needed-noble
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to nvme-cli in Ubuntu.
https://bugs.launchpad.net/bugs/2079836
Title:
libnvme reports incorrect LBA count on drives with 4k sectors
Status in nvme-utils:
Fix Released
Status in libnvme package in Ubuntu:
Fix Released
Status in nvme-cli package in Ubuntu:
Invalid
Status in libnvme source package in Noble:
Fix Committed
Status in nvme-cli source package in Noble:
Invalid
Bug description:
[ Impact ]
* libnvme reports incorrect lba_count, causing nvme-cli to show wrong drive sizes
[ Test Plan ]
* Running `nvme list` on a system with a 4k sector drive will report different
drive sizes:
halves at rotom:~$ nvme list
Node Generic SN Model Namespace Usage Format F
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- -
/dev/nvme0n1 /dev/ng0n1 S4CBNA0N701386 SAMSUNG MZPLL1T6HAJQ-00005 0x1 1.60 TB / 12.80 TB 4 KiB + 0 B G
/dev/nvme1n1 /dev/ng1n1 S4CBNA0N701397 SAMSUNG MZPLL1T6HAJQ-00005 0x1 1.60 TB / 1.60 TB 512 B + 0 B G
On the test above, there are two NVMe drives present of the exact same
model. One of them is formatted with 4k sectors, so the total drive size is
reported incorrectly. After the patch, both drives have the same (correct) total
size:
halves at rotom:~$ nvme list
Node Generic SN Model Namespace Usage Format FW Rev
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
/dev/nvme0n1 /dev/ng0n1 S4CBNA0N701386 SAMSUNG MZPLL1T6HAJQ-00005 0x1 1.60 TB / 1.60 TB 4 KiB + 0 B GPJA2B3Q
/dev/nvme1n1 /dev/ng1n1 S4CBNA0N701397 SAMSUNG MZPLL1T6HAJQ-00005 0x1 1.60 TB / 1.60 TB 512 B + 0 B GPJA2B3Q
[ Where problems could occur ]
* lba_count will be recalculated using proper SECTOR_SHIFT information, so this
could "change" apparent drive sizes
* partitions and namespace information could be changed or be incorrect due to
the now correct LBA size calculation
[ Other info ]
* this is caused by libnvme not calculating lba_count using proper SECTOR_SHIFT
on 4k drives
* kernel reports NVMe sizes in 512 bytes, so this issue doesn't happen on
drives formatted using regular 512b sector size
--
[ Original Description ]
nvme-cli 2.8-1build2 (in Ubuntu/Noble) shows wrong drive sizes. Compare the following two.
1.16.3 (Ubuntu/Jammy) output:
# nvme list
Node SN Model Namespace Usage Format FW Rev
--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 82xxxxxxxxxx Kxxxxxxx1T92 1 0.00 B / 1.92 TB 4 KiB + 0 B 0106
/dev/nvme1n1 23xxxxxxxxxx Micron_7xxx_Mxxxxxx960TFR 1 3.60 GB / 960.20 GB 4 KiB + 0 B E2MU200
2.8.2 (Ubuntu/Noble) output:
# nvme list
Node Generic SN Model Namespace Usage Format FW Rev··
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
/dev/nvme0n1 /dev/ng0n1 82xxxxxxxxxx Kxxxxxxx1T92 0x1 0.00 B / 15.36 TB 4 KiB + 0 B 0106
/dev/nvme1n1 /dev/ng1n1 23xxxxxxxxxx Micron_7xxx_Mxxxxxx960TFR 0x1 3.54 GB / 7.68 TB 4 KiB + 0 B E2MU200
The difference is this: 1.92 TB vs 15.36 TB, and 960.20 GB vs 7.68
TB.
The drives did not suddenly get bigger, but the problem is described here:
https://github.com/linux-nvme/nvme-cli/issues/2260
And fixed here:
https://github.com/linux-nvme/libnvme/pull/803/commits/00efe8364b0a
This fix is included in:
https://github.com/linux-nvme/libnvme/releases/tag/v1.9
That is not available in the 2.8 version:
# nvme --version
nvme version 2.8 (git 2.8)
libnvme version 1.8 (git 1.8)
But it should be in the Oracular 2.10 one:
nvme-cli (2.10-1) sid; urgency=medium
[...]
* Bumping libnvme build-depends to 1.10.
Suggested patch fixes things, as can be seen here:
# nvme list -o json | grep -vE 'ModelNumber|SerialNumber' >old
(switch to 0osso0 patched build)
# nvme list -o json | grep -vE 'ModelNumber|SerialNumber' >new
# apt-cache policy libnvme1t64
libnvme1t64:
Installed: 1.8-3build1+0osso0
Candidate: 1.8-3build1+0osso0
Version table:
*** 1.8-3build1+0osso0 500
500 http://ppa.osso.nl/ubuntu noble/osso amd64 Packages
100 /var/lib/dpkg/status
1.8-3build1 500
500 http://apt.osso.nl/ubuntu noble/main amd64 Packages
# diff -U1000 old new
--- old 2024-09-06 14:03:36.981330913 +0000
+++ new 2024-09-06 14:03:10.680072465 +0000
@@ -1,24 +1,24 @@
{
"Devices":[
{
"NameSpace":1,
"DevicePath":"/dev/nvme1n1",
"GenericPath":"/dev/ng1n1",
"Firmware":"E2MU200",
"UsedBytes":3596890112,
- "MaximumLBA":1875385008,
- "PhysicalSize":7681576992768,
+ "MaximumLBA":234423126,
+ "PhysicalSize":960197124096,
"SectorSize":4096
},
{
"NameSpace":1,
"DevicePath":"/dev/nvme0n1",
"GenericPath":"/dev/ng0n1",
"Firmware":"0106",
"UsedBytes":0,
- "MaximumLBA":3750748848,
- "PhysicalSize":15363067281408,
+ "MaximumLBA":468843606,
+ "PhysicalSize":1920383410176,
"SectorSize":4096
}
]
}
Patch 00efe8364b0.patch is attached.
Summarizing:
ubuntu/jammy - not affected
ubuntu/noble - affected but fixed by 00efe8364b0.patch
ubuntu/oracular - not affected
Cheers,
Walter Doekes
OSSO B.V.
To manage notifications about this bug go to:
https://bugs.launchpad.net/nvme-utils/+bug/2079836/+subscriptions
More information about the foundations-bugs
mailing list