From 20bb8eba7ec9c57da4e24415e54a3b84909744c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 18 Feb 2016 13:39:09 +0000 Subject: [PATCH] Get btrfs used capacity from btrfs filesystem show --raw It's output looks like: Label: 'test' uuid: d23f3138-c8ea-449e-9155-015ce4f6e2e6 Total devices 1 FS bytes used 131072 devid 1 size 981467136 used 252706816 path /dev/sdb1 FS bytes used number is actual data on btrfs volume. However, to resize successfully we need to know actual space used by data and metadata. That's why we read size from devid (i.e. 252706816). Btrfs volumes can span over multiple devices, so we must make sure that we are reading devid corresponding to the correct device node. BUG: 353333 --- src/fs/btrfs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/btrfs.cpp b/src/fs/btrfs.cpp index 7baf3c8..1c60564 100644 --- a/src/fs/btrfs.cpp +++ b/src/fs/btrfs.cpp @@ -105,10 +105,10 @@ qint64 btrfs::maxLabelLength() const qint64 btrfs::readUsedCapacity(const QString& deviceNode) const { - ExternalCommand cmd(QStringLiteral("btrfs-debug-tree"), QStringList() << deviceNode); + ExternalCommand cmd(QStringLiteral("btrfs"), QStringList() << QStringLiteral("filesystem") << QStringLiteral("show") << QStringLiteral("--raw") << deviceNode); if (cmd.run()) { - QRegExp rxBytesUsed(QStringLiteral(" bytes used (\\d+)")); + QRegExp rxBytesUsed(QStringLiteral(" used (\\d+) path ") + deviceNode); if (rxBytesUsed.indexIn(cmd.output()) != -1) return rxBytesUsed.cap(1).toLongLong();