Skip to contentSkip to conversation

mdadm --fail requires writeable drive.

DISCUSSION Benjamin ESTRABAUD 2 participants 5 messages Nov 13, 2013 – Nov 15, 2013 MD RAID

lore
Share & tools
lore
#0 lore raw

Hi,

I noticed that mdadm --fail will only work if a disk is present and is writeable.

mdadm's Manage.c seems to first make sure the drive can be "stat"ed before proceeding (which will fail if the drive is gone), and then seemingly try to write "Faulty" to the drive's superblock as well as notifying MD of the drive failure.

However, in many cases, a drive must be set faulty because it has gone offline. MD will do a very good job to set the drive faulty itself, provided that IOs are running on the array. If no IOs are running on the array, removing a drive and then trying to set it as failed will not work. Trying to "-r" the drive will also fail since the drive is not yet marked as failed, so deemed still in use.

Looking through the code it seemed to me that MD could be told to fail a drive even if that drive was no longer present (the /dev/sdX device node file still is in this case), in the same way as remove works. Would that be possible? Am I missing something here?

Thanks in advance for your help.

Regards,

Ben - MPSTOR

#1 lore raw
Quoted 17 lines · On Wed, 13 Nov 2013 12:17:21 +0000 Benjamin ESTRABAUD <[email protected]> wrote:

Hi,

I noticed that mdadm --fail will only work if a disk is present and is writeable.

mdadm's Manage.c seems to first make sure the drive can be "stat"ed before proceeding (which will fail if the drive is gone), and then seemingly try to write "Faulty" to the drive's superblock as well as notifying MD of the drive failure.

However, in many cases, a drive must be set faulty because it has gone offline. MD will do a very good job to set the drive faulty itself, provided that IOs are running on the array. If no IOs are running on the array, removing a drive and then trying to set it as failed will not work. Trying to "-r" the drive will also fail since the drive is not yet marked as failed, so deemed still in use.

Quoted 4 lines

Looking through the code it seemed to me that MD could be told to fail a drive even if that drive was no longer present (the /dev/sdX device node file still is in this case), in the same way as remove works. Would that be possible? Am I missing something here?

Does
mdadm /dev/mdXX --fail detached

do what you want?

NeilBrown

#2 lore raw

Hi Neil,

This does work but I was looking for a way to explicitely set a particular device as Failed (I want to process devices one by one).

But right now I was reading from the array to force it detecting the failure as opposed to using "detached" which orders of magnitude better.

Thanks for the tip, I'll use that for now.

Regards,
Ben.

Quoted 31 lines · NeilBrown
Quoted 17 lines · On Wed, 13 Nov 2013 12:17:21 +0000 Benjamin ESTRABAUD <[email protected]> wrote:

Hi,

I noticed that mdadm --fail will only work if a disk is present and is writeable.

mdadm's Manage.c seems to first make sure the drive can be "stat"ed before proceeding (which will fail if the drive is gone), and then seemingly try to write "Faulty" to the drive's superblock as well as notifying MD of the drive failure.

However, in many cases, a drive must be set faulty because it has gone offline. MD will do a very good job to set the drive faulty itself, provided that IOs are running on the array. If no IOs are running on the array, removing a drive and then trying to set it as failed will not work. Trying to "-r" the drive will also fail since the drive is not yet marked as failed, so deemed still in use.

Quoted 4 lines

Looking through the code it seemed to me that MD could be told to fail a drive even if that drive was no longer present (the /dev/sdX device node file still is in this case), in the same way as remove works. Would that be possible? Am I missing something here?

Does
mdadm /dev/mdXX --fail detached

do what you want?

NeilBrown

#3 lore raw
Quoted 9 lines · On Thu, 14 Nov 2013 17:33:01 +0000 Benjamin ESTRABAUD <[email protected]> wrote:

Hi Neil,

This does work but I was looking for a way to explicitely set a particular device as Failed (I want to process devices one by one).

But right now I was reading from the array to force it detecting the failure as opposed to using "detached" which orders of magnitude better.

Thanks for the tip, I'll use that for now.

If you really want to just fail one of them you can used the "kernel name" like "sda1".
If you
ls -d /sys/block/mdXX/md/dev-*

you will see the devices that are though to be part of the array. The part of the name after "dev-" is the "kernel name".
"mdadm /dev/mdXX --fail" will accept a "kernel name" and will mark just that device as faulty.

NeilBrown

#4 lore raw
Quoted 4 lines · NeilBrown
Quoted 2 lines · On Thu, 14 Nov 2013 17:33:01 +0000 Benjamin ESTRABAUD <[email protected]> wrote:

Hi Neil,

Quoted 8 lines
Quoted 7 lines

This does work but I was looking for a way to explicitely set a particular device as Failed (I want to process devices one by one).

But right now I was reading from the array to force it detecting the failure as opposed to using "detached" which orders of magnitude better.

Thanks for the tip, I'll use that for now.

Hi Neil,

Quoted 5 lines

If you really want to just fail one of them you can used the "kernel name" like "sda1".
If you

    ls -d /sys/block/mdXX/md/dev-*

Thanks a lot for this! This is exactly what I was looking for and it worked like a charm.

Quoted 5 lines

you will see the devices that are though to be part of the array. The part of the name after "dev-" is the "kernel name".
"mdadm /dev/mdXX --fail" will accept a "kernel name" and will mark just that device as faulty.

That's perfect. Thanks a lot!

Quoted 2 lines

NeilBrown

Ben.