On Sun, Feb 26, 2012 at 04:44:00PM +0000, Hugo Mills wrote:
>    OK, the real problem you're seeing is that when btrfs removes a
> device from the filesystem, that device is not modified in any way.
> This means that the old superblock is left behind on it, containing
> the FS label information. What you need to do is, immediately after
> removing a device from the FS, zero the first part of the partition
> with dd and /dev/zero.

A correction here: if the device being removed is writable, the
superblock is cleared so it's not recognized as a part of any other fs:

int btrfs_rm_device(struct btrfs_root *root, char *device_path)
...
        /*
         * at this point, the device is zero sized.  We want to
         * remove it from the devices list and zero out the old super
         */
        if (clear_super) {
                /* make sure this device isn't detected as part of
                 * the FS anymore
                 */
                memset(&disk_super->magic, 0, sizeof(disk_super->magic));
                set_buffer_dirty(bh);
                sync_dirty_buffer(bh);
        }

Doing this manually means zeroing 4k block at all offsets up to
partition size:

Superblock 0 offset 65536
Superblock 1 offset 67108864
Superblock 2 offset 274877906944
Superblock 3 offset 1125899906842624
Superblock 4 offset 4611686018427387904


david
--
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

Reply via email to