diff options
author | Karel Zak | 2014-04-24 13:42:54 +0200 |
---|---|---|
committer | Karel Zak | 2014-04-24 13:42:54 +0200 |
commit | 24ed07818403f2ce52f9116a749036d58b91ca81 (patch) | |
tree | b9cfac8da2bd0d21bb075266ef715b2eaf776b31 /misc-utils/wipefs.c | |
parent | docs: update TODO (diff) | |
download | kernel-qcow2-util-linux-24ed07818403f2ce52f9116a749036d58b91ca81.tar.gz kernel-qcow2-util-linux-24ed07818403f2ce52f9116a749036d58b91ca81.tar.xz kernel-qcow2-util-linux-24ed07818403f2ce52f9116a749036d58b91ca81.zip |
wipefs: don't erase nested partition tables by default
It's possible the partition contains a partition table (BSD, or hybrid
boot images). It could be unexpected for users that the lost all (or
another) partitions when work with non-whole disk device. Let's
require --force.
For example:
# wipefs --all /dev/sdb
erases all including partition table, but on hybrid disk where the
first partition starts at first sector (so partition table is within
the first partition):
# wipefs --all /dev/sdb1
/dev/sdb1: ignore nested "dos" partition table on non-whole disk device
wipefs: Use the --force option to force erase.
asks for --force.
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1077310
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/wipefs.c')
-rw-r--r-- | misc-utils/wipefs.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/misc-utils/wipefs.c b/misc-utils/wipefs.c index 5dfaf0c55..2c1ea5947 100644 --- a/misc-utils/wipefs.c +++ b/misc-utils/wipefs.c @@ -365,7 +365,7 @@ static void rereadpt(int fd, const char *devname) static struct wipe_desc * do_wipe(struct wipe_desc *wp, const char *devname, int flags) { - int mode = O_RDWR, reread = 0; + int mode = O_RDWR, reread = 0, need_force = 0; blkid_probe pr; struct wipe_desc *w, *wp0; int zap = (flags & WP_FL_ALL) ? 1 : wp->zap; @@ -405,6 +405,15 @@ do_wipe(struct wipe_desc *wp, const char *devname, int flags) if (!wp->on_disk) continue; + if (!(flags & WP_FL_FORCE) + && wp->is_parttable + && !blkid_probe_is_wholedisk(pr)) { + warnx(_("%s: ignore nested \"%s\" partition " + "table on non-whole disk device."), devname, wp->type); + need_force = 1; + continue; + } + if (zap) { if (backup) do_backup(wp, backup); @@ -419,6 +428,9 @@ do_wipe(struct wipe_desc *wp, const char *devname, int flags) warnx(_("%s: offset 0x%jx not found"), devname, w->offset); } + if (need_force) + warnx(_("Use the --force option to force erase.")); + fsync(blkid_probe_get_fd(pr)); if (reread && (mode & O_EXCL)) |