Closed Sh3Rm4n closed 8 months ago
@Sh3Rm4n
Which partition in the supplied fstab
file is a duplicate? Judging by the stack trace it's supposed to be /boot
but it appears only once in the supplied fstab
file.
Sorry, I think I'm mistaken. I think the error is not coming from FStabCommand
but rather originates from the findmnt
command:
The last three entries are duplicated as far as I can see.
Other than that, should the PartitionTable
be the one deduplicating entries or the FstabCommand
/ FindmntCommand
?
EDIT: findmnt
has a --uniq
flag, which is an alternative to fix the error.
diff --git a/src/refind_btrfs/system/findmnt_command.py b/src/refind_btrfs/system/findmnt_command.py
index d09471e..248f9d9 100644
--- a/src/refind_btrfs/system/findmnt_command.py
+++ b/src/refind_btrfs/system/findmnt_command.py
@@ -82,7 +82,7 @@ class FindmntCommand(DeviceCommand):
output = constants.COLUMN_SEPARATOR.join(
[findmnt_column_key.value.upper() for findmnt_column_key in findmnt_columns]
)
- findmnt_command = f"findmnt --json --mtab --real --nofsroot --output {output}"
+ findmnt_command = f"findmnt --json --mtab --real --nofsroot --uniq --output {output}"
try:
logger.info(
Would it be possible for you to provide findmnt
's complete output?
The collapsed part in my previous comment includes the complete findmnt
output on my system (the json output).
Is that what you mean, or am I missing something?
findmnt --json --mtab --real --nofsroot --output PARTUUID,PARTLABEL,UUID,SOURCE,FSTYPE,LABEL,TARGET,OPTIONS > all.json
findmnt --uniq --json --mtab --real --nofsroot --output PARTUUID,PARTLABEL,UUID,SOURCE,FSTYPE,LABEL,TARGET,OPTIONS > uniq.json
diff all.json uniq.json
148,156d147
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
< },{
165,236d155
< },{
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
< },{
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
< },{
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
< },{
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
< },{
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
< },{
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
< },{
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
< },{
< "partuuid": "8de070f5-b0da-40d6-8d1e-6bfb5650803b",
< "partlabel": "primary",
< "uuid": "5D01-B29B",
< "source": "/dev/sda1",
< "fstype": "vfat",
< "label": null,
< "target": "/boot",
< "options": "rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro"
So many /boot
entries are pretty weird but I'd be perfectly fine with findmnt
doing the deduplication since there's no need to reinvent the wheel here. Update you PR with the "uniq" option and I'll merge it. 👍🏼
So many
/boot
entries are pretty weird but I'd be perfectly fine withfindmnt
doing the deduplication since there's no need to reinvent the wheel here. Update you PR with the "uniq" option and I'll merge it. 👍🏼
I've updated the PR to only include the additional --uniq
flag
Alright, I'll release the new package later today or probably tomorrow.
/etc/fstab
https://github.com/Venom1991/refind-btrfs/blob/8e0021a62d3d9446b8dcfdcdf0f97567dfdec232/src/refind_btrfs/system/fstab_command.py#L104
https://github.com/Venom1991/refind-btrfs/blob/8e0021a62d3d9446b8dcfdcdf0f97567dfdec232/src/refind_btrfs/system/fstab_command.py#L116
fstab
files can reference partitions multiple timesExpand to see fstab example
```/etc/fstab # Static information about the filesystems. # See fstab(5) for details. #thus returning a Partition multiple times.
https://github.com/Venom1991/refind-btrfs/blob/8e0021a62d3d9446b8dcfdcdf0f97567dfdec232/src/refind_btrfs/device/partition_table.py#L172 https://github.com/Venom1991/refind-btrfs/blob/8e0021a62d3d9446b8dcfdcdf0f97567dfdec232/src/refind_btrfs/device/partition_table.py#L183 https://github.com/Venom1991/refind-btrfs/blob/8e0021a62d3d9446b8dcfdcdf0f97567dfdec232/src/refind_btrfs/device/partition_table.py#L194
python backtrace
``` Nov 17 12:30:07 systemd[1]: Started Generate rEFInd manual boot stanzas from Btrfs snapshots. Nov 17 13:01:44 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: The '/.snapshots/1931' snapshot has been created. Nov 17 13:01:44 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the block devices using lsblk. Nov 17 13:01:44 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/loop0' using lsblk. Nov 17 13:01:44 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/loop0' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/loop1' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/loop1' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/loop2' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/loop2' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/loop3' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/loop3' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/loop4' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/loop4' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/loop5' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/loop5' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/loop6' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/loop6' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/loop7' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/loop7' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/sda' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/sda' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/sdb' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/sdb' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/sdc' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/sdc' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/sr0' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/sr0' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the physical partition table for device '/dev/zram0' using lsblk. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: Initializing the live partition table for device '/dev/zram0' using findmnt. Nov 17 13:01:45 /usr/lib/python3.11/site-packages/refind_btrfs/__main__.py[139597]: ERROR (refind_btrfs.service.snapshot_observer/snapshot_observer.py/run): An unexpected error happened, exiting... Traceback (most recent call last): File "/usr/lib/python3.11/site-packages/refind_btrfs/service/snapshot_observer.py", line 45, in run self.dispatch_events(self.event_queue) File "/usr/lib/python3.11/site-packages/watchdog/observers/api.py", line 381, in dispatch_events handler.dispatch(event) File "/usr/lib/python3.11/site-packages/watchdog/events.py", line 283, in dispatch { File "/usr/lib/python3.11/site-packages/refind_btrfs/service/snapshot_event_handler.py", line 92, in on_created machine.run() File "/usr/lib/python3.11/site-packages/refind_btrfs/state_management/refind_btrfs_machine.py", line 102, in run while model.next_state(): ^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/transitions/core.py", line 402, in trigger return self.machine._process(func) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/transitions/core.py", line 1211, in _process return trigger() ^^^^^^^^^ File "/usr/lib/python3.11/site-packages/transitions/core.py", line 416, in _trigger self._process(event_data) File "/usr/lib/python3.11/site-packages/transitions/core.py", line 439, in _process if trans.execute(event_data): ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/transitions/core.py", line 277, in execute self._change_state(event_data) File "/usr/lib/python3.11/site-packages/transitions/core.py", line 287, in _change_state event_data.machine.get_state(self.dest).enter(event_data) File "/usr/lib/python3.11/site-packages/transitions/core.py", line 129, in enter event_data.machine.callbacks(self.on_enter, event_data) File "/usr/lib/python3.11/site-packages/transitions/core.py", line 1146, in callbacks self.callback(func, event_data) File "/usr/lib/python3.11/site-packages/transitions/core.py", line 1167, in callback func(*event_data.args, **event_data.kwargs) File "/usr/lib/python3.11/site-packages/refind_btrfs/state_management/model.py", line 158, in initialize_block_devices block_device_filter(BlockDevice.has_boot), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/refind_btrfs/state_management/model.py", line 149, in block_device_filter return only( ^^^^^ File "/usr/lib/python3.11/site-packages/more_itertools/more.py", line 3273, in only first_value = next(it, default) ^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/refind_btrfs/state_management/model.py", line 152, in