On 2016-07-06 14:23, Chris Murphy wrote:
On Wed, Jul 6, 2016 at 12:04 PM, Austin S. Hemmelgarn
<ahferro...@gmail.com> wrote:
On 2016-07-06 13:19, Chris Murphy wrote:
On Wed, Jul 6, 2016 at 3:51 AM, Andrei Borzenkov <arvidj...@gmail.com>
wrote:
3) can we query btrfs whether it is mountable in degraded mode?
according to documentation, "btrfs device ready" (which udev builtin
follows) checks "if it has ALL of it’s devices in cache for mounting".
This is required for proper systemd ordering of services.
Where does udev builtin use btrfs itself? I see "btrfs ready $device"
which is not a valid btrfs user space command.
I never get any errors from "btrfs device ready" even when too many
devices are missing. I don't know what it even does or if it's broken.
This is a three device raid1 where I removed 2 devices and "btrfs
device ready" does not complain, it always returns silent for me no
matter what. It's been this way for years as far as I know.
[root@f24s ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move
Log Cpy%Sync Convert
1 VG Vwi-a-tz-- 50.00g thintastic 2.55
2 VG Vwi-a-tz-- 50.00g thintastic 4.00
3 VG Vwi-a-tz-- 50.00g thintastic 2.54
thintastic VG twi-aotz-- 90.00g 5.05 2.92
[root@f24s ~]# btrfs fi show
Label: none uuid: 96240fd9-ea76-47e7-8cf4-05d3570ccfd7
Total devices 3 FS bytes used 2.26GiB
devid 1 size 50.00GiB used 3.00GiB path /dev/mapper/VG-1
devid 2 size 50.00GiB used 2.01GiB path /dev/mapper/VG-2
devid 3 size 50.00GiB used 3.01GiB path /dev/mapper/VG-3
[root@f24s ~]# btrfs device ready /dev/mapper/VG-1
[root@f24s ~]#
[root@f24s ~]# lvchange -an VG/1
[root@f24s ~]# lvchange -an VG/2
[root@f24s ~]# btrfs dev scan
Scanning for Btrfs filesystems
[root@f24s ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move
Log Cpy%Sync Convert
1 VG Vwi---tz-- 50.00g thintastic
2 VG Vwi---tz-- 50.00g thintastic
3 VG Vwi-a-tz-- 50.00g thintastic 2.54
thintastic VG twi-aotz-- 90.00g 5.05 2.92
[root@f24s ~]# btrfs fi show
warning, device 2 is missing
Label: none uuid: 96240fd9-ea76-47e7-8cf4-05d3570ccfd7
Total devices 3 FS bytes used 2.26GiB
devid 3 size 50.00GiB used 3.01GiB path /dev/mapper/VG-3
*** Some devices missing
[root@f24s ~]# btrfs device ready /dev/mapper/VG-3
[root@f24s ~]#
You won't get any output from it regardless, you have to check the return
code as it's intended to be a tool for scripts and such.
How do I check the return code? When I use strace, no matter what I'm getting
+++ exited with 0 +++
I see both 'brfs device ready' and the udev btrfs builtin test are
calling BTRFS_IOC_DEVICES_READY so, it looks like udev is not using
user space tools to check but rather a btrfs ioctl. So clearly that
works or I wouldn't have stalled boots when all devices aren't
present.
In bash or most other POSIX compliant shells, you can run this:
echo $?
to get the return code of the previous command.
In your case though, it may be reporting the FS ready because it had
already seen all the devices, IIUC, the flag that checks is only set
once, and never unset, which is not a good design in this case.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html