From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1cfKjg-0006vg-2U for mharc-grub-devel@gnu.org; Sun, 19 Feb 2017 01:12:40 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36575) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cfKjd-0006vZ-OG for grub-devel@gnu.org; Sun, 19 Feb 2017 01:12:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cfKja-0003U7-Hq for grub-devel@gnu.org; Sun, 19 Feb 2017 01:12:37 -0500 Received: from mail-lf0-x243.google.com ([2a00:1450:4010:c07::243]:33739) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cfKja-0003To-6o for grub-devel@gnu.org; Sun, 19 Feb 2017 01:12:34 -0500 Received: by mail-lf0-x243.google.com with SMTP id x1so6608138lff.0 for ; Sat, 18 Feb 2017 22:12:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=OjLdTLo/wUbQVQWVm09dtE7XWPVJJrtyXpKmnBqvo8c=; b=T2hC6OLHwgNY9C9739zdtaARdimoHRKh1hQ6drkm4T7MdKSQw8QI+MrhateSigNg98 KoxW41pA08tNb0J9Aik+Yc74xMj/FvUMf+Ys+i9n5CR0soztWRUEmcwLWuKd4tLaERYK 3sXZAQ6sT/Fc7J55uoKDfNbD9VFXF5V3Ypv+UPmg47qnF7+QYkjBOUUrwL5Sk1OzPPft fnmSIz+qpn3hBiKgfWsK4dCytiWqyTz+iUQ4HPCe+DdbS9hFT9pFh1ERkszaqQ9Iy7Zv LHtclbDFhuns/swzYSGp/rtFkPYmuSDxW0q/cqzf8IOUY/073pOY2qqiUP4A6ypx2MUS 1Fcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=OjLdTLo/wUbQVQWVm09dtE7XWPVJJrtyXpKmnBqvo8c=; b=gCtu2ehqjpqJAWHYs+gwlRNm3h9Iu3lN4VTgs7Fkry2+pLZfOUDqHI4EjArVCrv3rx L+r8ODouSrLGaMFUm+Iuyocf8UKlbtH2uZwpJoCeVTAicI6rmKNa/1pFLShW5j98JDCU WG5boz7Ob3o9pYVL5OJUfTJ4LIe9HuVLIa8mBdWy4MQ9fm5xezV/IxxRDXLt4ylDXfXv FwwWoeHLKM7tIA+ftfpA43YMPnnsp6oSZPZAa2FIHmL4Ihw4UanPvBFZAbiMUnybbdNb VMO3QVq/eEQhOQTjPaaqlV35tH02MBbeUTmWEfMn8daFcfWCuiuTpQ2ZTh0EisOmpRMt w2ug== X-Gm-Message-State: AMke39lijEjNWS5RAQN3Yopi198mVcTSr0eSkhLcDHhQwGi16U2y1FdrNUjjPX/jCdH2Pw== X-Received: by 10.46.69.7 with SMTP id s7mr3912761lja.44.1487484752718; Sat, 18 Feb 2017 22:12:32 -0800 (PST) Received: from [192.168.1.6] (ppp109-252-90-129.pppoe.spdop.ru. [109.252.90.129]) by smtp.gmail.com with ESMTPSA id d77sm4100168lfd.26.2017.02.18.22.12.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Feb 2017 22:12:31 -0800 (PST) Subject: Re: [PATCH 1/1] add --partuuid to probe To: The development of GNU GRUB References: <20170214180035.3461-1-skenton@ou.edu> Cc: Steve Kenton From: Andrei Borzenkov Message-ID: Date: Sun, 19 Feb 2017 09:12:30 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:4010:c07::243 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Feb 2017 06:12:39 -0000 15.02.2017 20:25, Vladimir 'phcoder' Serbinenko пишет: > On Wed, Feb 15, 2017, 17:27 Andrei Borzenkov wrote: > >> 15.02.2017 13:56, Vladimir 'phcoder' Serbinenko пишет: >>> On Tue, Feb 14, 2017, 19:01 Steve Kenton wrote: >>> >>>> Support both EFI and NT Disk Signature for passing to kernel as >>>> root=PARTUUID=$val >>>> >>>> Signed-off-by: Steve Kenton >>>> --- >>>> It's been six months so I thought I'd resend this so it does not get >> lost >>>> in case I get hit by a meteor or something before the next release >>>> >>>> grub-core/commands/probe.c | 53 >>>> ++++++++++++++++++++++++++++++++++++++++++++++ >>>> 1 file changed, 53 insertions(+) >>>> >>>> diff --git a/grub-core/commands/probe.c b/grub-core/commands/probe.c >>>> index cf2793e..3afc8b8 100644 >>>> --- a/grub-core/commands/probe.c >>>> +++ b/grub-core/commands/probe.c >>>> @@ -45,6 +45,7 @@ static const struct grub_arg_option options[] = >>>> {"fs", 'f', 0, N_("Determine filesystem type."), 0, 0}, >>>> {"fs-uuid", 'u', 0, N_("Determine filesystem >> UUID."), >>>> 0, 0}, >>>> {"label", 'l', 0, N_("Determine filesystem label."), 0, >> 0}, >>>> + {"partuuid", 'g', 0, N_("Determine partition GUID/UUID."), 0, >>>> 0}, /* GUID but Linux kernel calls it "PARTUUID" */ >>>> >>> I like how it generalizes. >>> >>>> {0, 0, 0, 0, 0, 0} >>>> }; >>>> >>>> @@ -154,6 +155,58 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int >> argc, >>>> char **args) >>>> grub_device_close (dev); >>>> return GRUB_ERR_NONE; >>>> } >>>> + if (state[6].set) >>>> + { >>>> + char *partuuid = NULL; /* NULL to silence a spurious GCC warning >> */ >>>> + grub_uint8_t diskbuf[16]; >>>> + if (dev->disk && dev->disk->partition) >>>> + { >>>> + grub_partition_t p = dev->disk->partition; >>>> + if (!grub_strcmp (p->partmap->name, "msdos")) >>>> >>> Please use == 0 rather than ! >>> >>>> + { >>>> + const int diskid_offset = 440; /* location in MBR */ >>>> >>> Please get this from a common header rather than hard coding. I think we >>> have it in msdos.h >>> >>>> + dev->disk->partition = p->parent; >>>> + /* little-endian 4-byte NT disk signature */ >>>> + err = grub_disk_read (dev->disk, 0, diskid_offset, 4, >>>> diskbuf); >>>> + dev->disk->partition = p; >>>> + if (err) >>>> + return grub_errno; >>>> + partuuid = grub_xasprintf ("%02x%02x%02x%02x-%02x", >>>> + diskbuf[3], diskbuf[2], >>>> diskbuf[1], diskbuf[0], >>>> + p->number + 1); /* one based >>>> partition number */ >>>> >>> This is not NT-style. NT uses partition offset. Who uses this format? Are >> >> This is used by util-linux and Linux kernel. >> >> >> * 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the >> * unique id of a partition if the partition table provides it. >> * The UUID may be either an EFI/GPT UUID, or refer to an MSDOS >> * partition using the format SSSSSSSS-PP, where SSSSSSSS is a >> zero- >> * filled hex representation of the 32-bit "NT disk signature", >> and PP >> * is a zero-filled hex representation of the 1-based partition >> number. >> >>> you sure that partition numbers are synced with user? Even in presence of >>> Solaris and bsd partitions. >>> >> >> It is not clear what we should return for nested partition. I'm not sure >> whether linux kernel scans nested partitions at all in which case we >> probably should follow the suite and assign PARTUUID to top-level >> partitions only. >> > Linux scans nested partitions and it uses though numeration in dev/sdaX, in > some cases shifting numbering of normal partitions. In those cases grub and > Linux numeration get out of sync > Can you provide example? I tried to create nested partition table, but Linux will not display it (actually attempt to "blockdev --rereadpt /dev/vda5" fails with "Invalid argument"). if (!disk_part_scan_enabled(disk) || bdev != bdev->bd_contains) return -EINVAL; Where bdev->bd_contains points to containing device for partition and to itself for the whole disk. As util-linux does not scan partition table itself, it does show these nested partitions either.