Version 2.02.46 -
================================
+ Detect and conditionally wipe swapspace signatures in pvcreate.
Fix maximal volume count check for snapshots if max_lv set for volume group.
Fix lvcreate to remove cow volume if the snapshot creation fails.
Fix error messages when PV uuid or pe_start reading fails.
device/dev-cache.c \
device/dev-io.c \
device/dev-md.c \
+ device/dev-swap.c \
device/device.c \
display/display.c \
error/errseg.c \
/* Does device contain md superblock? If so, where? */
int dev_is_md(struct device *dev, uint64_t *sb);
+int dev_is_swap(struct device *dev, uint64_t *signature);
unsigned long dev_md_chunk_size(const char *sysfs_dir, struct device *dev);
int is_partitioned_dev(struct device *dev);
pvcreate --uuid $uuid1 $dev1
vgcfgbackup -f $backupfile
not pvcreate --uuid $uuid2 --restorefile $backupfile $dev2
+
+# pvcreate wipes swap signature when forced
+dd if=/dev/zero of=$dev1 bs=1024 count=64
+mkswap $dev1
+file -s $dev1 | grep "swap file"
+pvcreate -f $dev1
+file -s $dev1 | not grep "swap file"
{
struct physical_volume *pv;
struct device *dev;
- uint64_t md_superblock;
+ uint64_t md_superblock, swap_signature;
/* FIXME Check partition type is LVM unless --force is given */
}
}
+ if (dev_is_swap(dev, &swap_signature) &&
+ ((!pp->idp && !pp->restorefile) || pp->yes ||
+ (yes_no_prompt("Swap signature detected on %s. Wipe it? [y/n] ",
+ name) == 'y'))) {
+ log_print("Wiping swap signature on %s", name);
+ if (!dev_set(dev, swap_signature, 10, 0)) {
+ log_error("Failed to wipe swap signature on %s", name);
+ return 0;
+ }
+ }
+
if (sigint_caught())
return 0;