[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Refuse to install on XFS destroying its superblock
From: |
Vladimir 'phcoder' Serbinenko |
Subject: |
Re: [PATCH] Refuse to install on XFS destroying its superblock |
Date: |
Sat, 17 Oct 2009 00:18:05 +0200 |
User-agent: |
Mozilla-Thunderbird 2.0.0.22 (X11/20090701) |
Robert Millan wrote:
> On Fri, Oct 16, 2009 at 11:08:31PM +0200, Vladimir 'phcoder' Serbinenko wrote:
>
>> Robert Millan wrote:
>>
>>> On Fri, Oct 16, 2009 at 10:09:41PM +0200, Vladimir 'phcoder' Serbinenko
>>> wrote:
>>>
>>>
>>>> Robert Millan wrote:
>>>>
>>>>
>>>>> On Fri, Oct 16, 2009 at 06:01:56PM +0200, Jordi Mallach wrote:
>>>>>
>>>>>
>>>>>
>>>>>> On Fri, Oct 16, 2009 at 04:03:01PM +0200, Vladimir 'phcoder' Serbinenko
>>>>>> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> + if (memcmp (tmp_img, "XFSB", 4) == 0)
>>>>>>> + grub_util_error ("Can't install on XFS.");
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> Can this error message give some more detail on what the problem is?
>>>>>>
>>>>>>
>>>>>>
>>>>> I suggest something like:
>>>>>
>>>>> grub_util_warn ("Refusing to overwrite XFS meta-data.");
>>>>>
>>>>> This is more informative, and with grub_util_warn() user has an
>>>>> opportunity to
>>>>> override it if she knows what she's doing.
>>>>>
>>>>>
>>>>>
>>>>>
>>>> Installing with blocklists/to partition is considered
>>>> backward-compatibility feature. We never supported a config with XFS why
>>>> we would want bw-compat for it?
>>>>
>>>>
>>> Because we can't reliably tell if it's a config with XFS, only the user can.
>>> This is an issue for both MBR or PBR installs.
>>>
>>> Maybe "XFSB" is only a remnant from one of this disk / partition former
>>> lifes. Maybe it's a valid XFS but user no longer cares about it. Or
>>> maybe a DOS-style label was created on top of it, without overwriting the
>>> first
>>> 440 bytes. Or maybe another filesystem had overwritten most XFS metadata
>>> but preserved the first block (this is conceivable since other filesystems
>>> tend to avoid using the first block).
>>>
>>> If user has to workaround GRUB heuristics by dd'ing zeros into a partition
>>> before running grub-install, this is a sign GRUB isn't doing the right
>>> thing.
>>>
>>>
>>>
>> Well, ok. But then I would ask to use a separate --force e.g.
>> --force-destroy-xfs since users and distributions tend to use --force
>> too much
>>
>
> Ok.
>
>
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
diff --git a/ChangeLog b/ChangeLog
index 960fc06..cc225a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2009-10-16 Vladimir Serbinenko <address@hidden>
+ * util/i386/pc/grub-setup.c (setup): Refuse to overwrite XFS superblock.
+ (options): New option --destroy-xfs.
+ (main): Handle --destroy-xfs.
+
+2009-10-16 Vladimir Serbinenko <address@hidden>
+
Let user specify OpenBSD root device.
* loader/i386/bsd.c (openbsd_root): New variable.
diff --git a/util/i386/pc/grub-setup.c b/util/i386/pc/grub-setup.c
index ccfbd1d..4ef746b 100644
--- a/util/i386/pc/grub-setup.c
+++ b/util/i386/pc/grub-setup.c
@@ -86,7 +86,8 @@ grub_refresh (void)
static void
setup (const char *dir,
const char *boot_file, const char *core_file,
- const char *root, const char *dest, int must_embed, int force)
+ const char *root, const char *dest, int must_embed, int force,
+ int destroy_xfs)
{
char *boot_path, *core_path, *core_path_dev;
char *boot_img, *core_img;
@@ -251,6 +252,13 @@ setup (const char *dir,
if (grub_disk_read (dest_dev->disk, 0, 0, GRUB_DISK_SECTOR_SIZE, tmp_img))
grub_util_error ("%s", grub_errmsg);
+ if (memcmp (tmp_img, "XFSB", 4) == 0)
+ {
+ grub_util_warn ("This install would require destroying XFS.");
+ if (! destroy_xfs)
+ grub_util_error ("If you really want to destroy it use --destroy-xfs.");
+ }
+
/* Copy the possible DOS BPB. */
memcpy (boot_img + GRUB_BOOT_MACHINE_BPB_START,
tmp_img + GRUB_BOOT_MACHINE_BPB_START,
@@ -556,6 +564,7 @@ static struct option options[] =
{"device-map", required_argument, 0, 'm'},
{"root-device", required_argument, 0, 'r'},
{"force", no_argument, 0, 'f'},
+ {"destroy-xfs", no_argument, 0, 'X'},
{"help", no_argument, 0, 'h'},
{"version", no_argument, 0, 'V'},
{"verbose", no_argument, 0, 'v'},
@@ -580,6 +589,7 @@ DEVICE must be a GRUB device (e.g. ``(hd0,1)'').\n\
-m, --device-map=FILE use FILE as the device map [default=%s]\n\
-r, --root-device=DEV use DEV as the root device [default=guessed]\n\
-f, --force install even if problems are detected\n\
+ --destroy-xfs install even destroying XFS superblock\n\
-h, --help display this message and exit\n\
-V, --version print version information and exit\n\
-v, --verbose print verbose messages\n\
@@ -614,6 +624,7 @@ main (int argc, char *argv[])
char *root_dev = 0;
char *dest_dev;
int must_embed = 0, force = 0;
+ int destroy_xfs = 0;
progname = "grub-setup";
@@ -666,6 +677,10 @@ main (int argc, char *argv[])
force = 1;
break;
+ case 'X':
+ destroy_xfs = 1;
+ break;
+
case 'h':
usage (0);
break;
@@ -767,7 +782,8 @@ main (int argc, char *argv[])
setup (dir ? : DEFAULT_DIRECTORY,
boot_file ? : DEFAULT_BOOT_FILE,
core_file ? : DEFAULT_CORE_FILE,
- root_dev, grub_util_get_grub_dev (devicelist[i]), 1, force);
+ root_dev, grub_util_get_grub_dev (devicelist[i]), 1, force,
+ destroy_xfs);
}
}
else
@@ -776,7 +792,7 @@ main (int argc, char *argv[])
setup (dir ? : DEFAULT_DIRECTORY,
boot_file ? : DEFAULT_BOOT_FILE,
core_file ? : DEFAULT_CORE_FILE,
- root_dev, dest_dev, must_embed, force);
+ root_dev, dest_dev, must_embed, force, destroy_xfs);
/* Free resources. */
grub_fini_all ();
- [PATCH] Refuse to install on XFS destroying its superblock, Vladimir 'phcoder' Serbinenko, 2009/10/16
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Vladimir 'phcoder' Serbinenko, 2009/10/16
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Jordi Mallach, 2009/10/16
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Robert Millan, 2009/10/16
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Vladimir 'phcoder' Serbinenko, 2009/10/16
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Robert Millan, 2009/10/16
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Vladimir 'phcoder' Serbinenko, 2009/10/16
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Robert Millan, 2009/10/16
- Re: [PATCH] Refuse to install on XFS destroying its superblock,
Vladimir 'phcoder' Serbinenko <=
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Robert Millan, 2009/10/17
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Vladimir 'phcoder' Serbinenko, 2009/10/17
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Robert Millan, 2009/10/17
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Felix Zielcke, 2009/10/17
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Vladimir 'phcoder' Serbinenko, 2009/10/17
- Re: [PATCH] Refuse to install on XFS destroying its superblock, address@hidden, 2009/10/17
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Vladimir 'phcoder' Serbinenko, 2009/10/18
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Robert Millan, 2009/10/18
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Vladimir 'phcoder' Serbinenko, 2009/10/18
- Re: [PATCH] Refuse to install on XFS destroying its superblock, Robert Millan, 2009/10/20