Re: [PATCH] blkid: solve a bug that the disk device of the ceph_bluestore

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 20, 2023 at 10:35:32AM +0800, karel wrote:
> Not sure if I understand. According to docs BlueStore uses XFS
> partition to store metadata and another device to store raw data. It
> sounds like the XFS should be visible as a normal filesystem.

> From your description it sounds like the both is on the same device
> and we should not detect it as XFS log. If yes, then I do not
> understand why anyone use XFS log header for this purpose.

> XFS log detection seems robust, so I guess if libblkid detects the
> superblock then it's really the FS.

You can specify another disk device to store the external log for the XFS file system, similar to the following command:
mkfs.xfs -l logdev=/dev/nvme0n1p2,size=10000b /dev/nvme0n1p3

Using the dd command, you can copy the first sector of /dev/nvme0n1p2 to any sector between 17 and 512 of the 
Ceph BlueStore file system for disk device A, for example, sector 51. After performing this action, a problem occurs where an additional file system, 
efs_external_log, is created on the disk device A originally used for Ceph BlueStore. 
This leads to udev errors and the loss of the disk device A's partlabel. for example

blkid -o udev -p /dev/xxxx
ID_FS_AMBIVALIENT=other:ceph_blueStore other:efs_external_log

Ceph BlueStore file system for Disk device A is exposed as a block device for users to use as a cloud disk. 
Users can create an XFS External Log on it.

zhujun2

>> Signed-off-by: zhujun2 <zhujun2@xxxxxxxxxxxxxxxxxxxx>
>> ---
>>  libblkid/src/superblocks/xfs.c | 5 +++++
>>  1 file changed, 5 insertions(+)
>> 
>> diff --git a/libblkid/src/superblocks/xfs.c b/libblkid/src/superblocks/xfs.c
>> index d8c6fb6d4..3686bd52b 100644
>> --- a/libblkid/src/superblocks/xfs.c
>> +++ b/libblkid/src/superblocks/xfs.c
>> @@ -259,6 +259,11 @@ static int probe_xfs_log(blkid_probe pr,
>>  		if (memcmp(&buf[i*512], "XFSB", 4) == 0)
>>  			return 1;
>>  
>> +		if (memcmp(&buf[i*512], "bluestore block device", 22) == 0) {
>> +			DBG(LOWPROBE, ul_debug("\t device has ceph_bluestore ambivalent"));
>> +			return 1;
>> +		}
>> +
>>  		rhead = (struct xlog_rec_header *)&buf[i*512];
>>  
>>  		if (xlog_valid_rec_header(rhead)) {
>> -- 
>> 2.20.1





[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux