P_("A total of %ju free sectors is available in %u segment.",
"A total of %ju free sectors is available in %u segments "
"(the largest is %s).", nsegments),
- free_sectors, nsegments, strsz);
+ free_sectors, nsegments, strsz ? : "0 B");
free(strsz);
} else
{
uint64_t user_f, user_l; /* user input ranges for first and last sectors */
uint64_t disk_f, disk_l; /* first and last available sector ranges on device*/
- uint64_t dflt_f, dflt_l; /* largest segment (default) */
+ uint64_t dflt_f, dflt_l, max_l; /* largest segment (default) */
struct gpt_guid typeid;
struct fdisk_gpt_label *gpt;
struct gpt_header *pheader;
dflt_f = find_first_in_largest(gpt);
dflt_l = find_last_free(gpt, dflt_f);
+ /* don't offer too small free space by default, this is possible to
+ * bypass by sfdisk script */
+ if ((!pa || !fdisk_partition_has_start(pa))
+ && dflt_l - dflt_f + 1 < cxt->grain / cxt->sector_size) {
+ fdisk_warnx(cxt, _("No enough free sectors available."));
+ return -ENOSPC;
+ }
+
/* align the default in range <dflt_f,dflt_l>*/
dflt_f = fdisk_align_lba_in_range(cxt, dflt_f, dflt_f, dflt_l);
/* Last sector */
- dflt_l = find_last_free(gpt, user_f);
+ dflt_l = max_l = find_last_free(gpt, user_f);
+
+ /* Make sure the last partition has aligned size by default because
+ * range specified by LastUsableLBA may be unaligned on disks where
+ * logical sector != physical (512/4K) because backup header size is
+ * calculated from logical sectors. */
+ if (max_l == le64_to_cpu(gpt->pheader->last_usable_lba))
+ dflt_l = fdisk_align_lba_in_range(cxt, max_l, user_f, max_l) - 1;
if (pa && pa->end_follow_default) {
user_l = dflt_l;
} else if (pa && fdisk_partition_has_size(pa)) {
user_l = user_f + pa->size - 1;
- DBG(GPT, ul_debug("size defined: %ju, end: %"PRIu64" (last possible: %"PRIu64")",
- (uintmax_t)pa->size, user_l, dflt_l));
+ DBG(GPT, ul_debug("size defined: %ju, end: %"PRIu64
+ "(last possible: %"PRIu64", optimal: %"PRIu64")",
+ (uintmax_t)pa->size, user_l, max_l, dflt_l));
if (user_l != dflt_l
&& !pa->size_explicit
fdisk_ask_set_type(ask, FDISK_ASKTYPE_OFFSET);
fdisk_ask_number_set_low(ask, user_f); /* minimal */
fdisk_ask_number_set_default(ask, dflt_l); /* default */
- fdisk_ask_number_set_high(ask, dflt_l); /* maximal */
+ fdisk_ask_number_set_high(ask, max_l); /* maximal */
fdisk_ask_number_set_base(ask, user_f); /* base for relative input */
fdisk_ask_number_set_unit(ask, cxt->sector_size);
fdisk_ask_number_set_wrap_negative(ask, 1); /* wrap negative around high */
Disk identifier: <removed>
Device Start End Sectors Size Type
-<removed>p1 2048 20446 18399 9M Linux filesystem
+<removed>p1 2048 18431 16384 8M Linux filesystem
The partition table has been altered.
----- fixing after resize: -----
Be careful before using the write command.
-Command (m for help): Partition number (2-128, default 2): First sector (20447-40926, default 20480): Last sector, +/-sectors or +/-size{K,M,G,T,P} (20480-40926, default 40926):
+Command (m for help): Partition number (2-128, default 2): First sector (18432-40926, default 18432): Last sector, +/-sectors or +/-size{K,M,G,T,P} (18432-40926, default 38911):
Created a new partition <removed>.
Command (m for help): The partition table has been altered.
Disk identifier: <removed>
Device Start End Sectors Size Type
-<removed>p1 2048 20446 18399 9M Linux filesystem
-<removed>p2 20480 40926 20447 10M Linux filesystem
+<removed>p1 2048 18431 16384 8M Linux filesystem
+<removed>p2 18432 38911 20480 10M Linux filesystem
Device Start End Sectors Size Type
<removed>1 2048 12287 10240 5M Linux filesystem
-<removed>2 12288 20446 8159 4M Linux filesystem
+<removed>2 12288 18431 6144 3M Linux filesystem
The partition table has been altered.
Syncing disks.
Device Start End Sectors Size Type
<removed>1 2048 12287 10240 5M Linux filesystem
-<removed>2 12288 20446 8159 4M Linux filesystem
+<removed>2 12288 18431 6144 3M Linux filesystem
The partition table has been altered.
Syncing disks.
<removed>4 8192 10239 2048 1M Linux filesystem
<removed>5 10240 12287 2048 1M Linux filesystem
<removed>6 12288 14335 2048 1M Linux filesystem
-<removed>7 14336 30686 16351 8M Linux filesystem
+<removed>7 14336 28671 14336 7M Linux filesystem
<removed>2 12288 22527 10240 5M Linux filesystem
<removed>3 22528 32767 10240 5M Linux swap
<removed>4 32768 43007 10240 5M Linux root (x86-64)
-<removed>5 43008 102366 59359 29M Linux filesystem
+<removed>5 43008 100351 57344 28M Linux filesystem
The partition table has been altered.
Calling ioctl() to re-read partition table.
GPT Header: offset = 512, size = 512 bytes.
00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00
-00000210 cc 5a ce cf 00 00 00 00 01 00 00 00 00 00 00 00
+00000210 9b 58 15 32 00 00 00 00 01 00 00 00 00 00 00 00
00000220 ff 8f 01 00 00 00 00 00 00 08 00 00 00 00 00 00
00000230 de 8f 01 00 00 00 00 00 99 c3 81 b1 11 47 52 4c
00000240 8b 65 9e 76 45 41 21 8d 02 00 00 00 00 00 00 00
-00000250 80 00 00 00 80 00 00 00 9f 91 62 10 00 00 00 00
+00000250 80 00 00 00 80 00 00 00 25 86 e1 c0 00 00 00 00
00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
*
00000600 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4
00000610 d7 5b 15 60 d8 bf 8c 4e b8 00 22 19 00 77 93 73
-00000620 00 a8 00 00 00 00 00 00 de 8f 01 00 00 00 00 00
+00000620 00 a8 00 00 00 00 00 00 ff 87 01 00 00 00 00 00
00000630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
*
031fc000 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4
031fc010 d7 5b 15 60 d8 bf 8c 4e b8 00 22 19 00 77 93 73
-031fc020 00 a8 00 00 00 00 00 00 de 8f 01 00 00 00 00 00
+031fc020 00 a8 00 00 00 00 00 00 ff 87 01 00 00 00 00 00
031fc030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
GPT Backup Header: offset = 52428288, size = 512 bytes.
031ffe00 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00
-031ffe10 75 e0 4c 4f 00 00 00 00 ff 8f 01 00 00 00 00 00
+031ffe10 22 e2 97 b2 00 00 00 00 ff 8f 01 00 00 00 00 00
031ffe20 01 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00
031ffe30 de 8f 01 00 00 00 00 00 99 c3 81 b1 11 47 52 4c
031ffe40 8b 65 9e 76 45 41 21 8d df 8f 01 00 00 00 00 00
-031ffe50 80 00 00 00 80 00 00 00 9f 91 62 10 00 00 00 00
+031ffe50 80 00 00 00 80 00 00 00 25 86 e1 c0 00 00 00 00
031ffe60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
GPT Header: offset = 512, size = 512 bytes.
00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00
-00000210 0d a5 4b da 00 00 00 00 01 00 00 00 00 00 00 00
+00000210 5a a7 90 27 00 00 00 00 01 00 00 00 00 00 00 00
00000220 ff 8f 01 00 00 00 00 00 00 08 00 00 00 00 00 00
00000230 de 8f 01 00 00 00 00 00 99 c3 81 b1 11 47 52 4c
00000240 8b 65 9e 76 45 41 21 8d 02 00 00 00 00 00 00 00
-00000250 80 00 00 00 80 00 00 00 15 4e df fa 00 00 00 00
+00000250 80 00 00 00 80 00 00 00 af 59 5c 2a 00 00 00 00
00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
*
00000600 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4
00000610 d7 5b 15 60 d8 bf 8c 4e b8 00 22 19 00 77 93 73
-00000620 00 a8 00 00 00 00 00 00 de 8f 01 00 00 00 00 00
+00000620 00 a8 00 00 00 00 00 00 ff 87 01 00 00 00 00 00
00000630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
*
031fc000 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4
031fc010 d7 5b 15 60 d8 bf 8c 4e b8 00 22 19 00 77 93 73
-031fc020 00 a8 00 00 00 00 00 00 de 8f 01 00 00 00 00 00
+031fc020 00 a8 00 00 00 00 00 00 ff 87 01 00 00 00 00 00
031fc030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
GPT Backup Header: offset = 52428288, size = 512 bytes.
031ffe00 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00
-031ffe10 b4 1f c9 5a 00 00 00 00 ff 8f 01 00 00 00 00 00
+031ffe10 e3 1d 12 a7 00 00 00 00 ff 8f 01 00 00 00 00 00
031ffe20 01 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00
031ffe30 de 8f 01 00 00 00 00 00 99 c3 81 b1 11 47 52 4c
031ffe40 8b 65 9e 76 45 41 21 8d df 8f 01 00 00 00 00 00
-031ffe50 80 00 00 00 80 00 00 00 15 4e df fa 00 00 00 00
+031ffe50 80 00 00 00 80 00 00 00 af 59 5c 2a 00 00 00 00
031ffe60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
GPT Header: offset = 512, size = 512 bytes.
00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00
-00000210 cc 5a ce cf 00 00 00 00 01 00 00 00 00 00 00 00
+00000210 9b 58 15 32 00 00 00 00 01 00 00 00 00 00 00 00
00000220 ff 8f 01 00 00 00 00 00 00 08 00 00 00 00 00 00
00000230 de 8f 01 00 00 00 00 00 99 c3 81 b1 11 47 52 4c
00000240 8b 65 9e 76 45 41 21 8d 02 00 00 00 00 00 00 00
-00000250 80 00 00 00 80 00 00 00 9f 91 62 10 00 00 00 00
+00000250 80 00 00 00 80 00 00 00 25 86 e1 c0 00 00 00 00
00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
*
00000600 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4
00000610 d7 5b 15 60 d8 bf 8c 4e b8 00 22 19 00 77 93 73
-00000620 00 a8 00 00 00 00 00 00 de 8f 01 00 00 00 00 00
+00000620 00 a8 00 00 00 00 00 00 ff 87 01 00 00 00 00 00
00000630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
*
031fc000 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4
031fc010 d7 5b 15 60 d8 bf 8c 4e b8 00 22 19 00 77 93 73
-031fc020 00 a8 00 00 00 00 00 00 de 8f 01 00 00 00 00 00
+031fc020 00 a8 00 00 00 00 00 00 ff 87 01 00 00 00 00 00
031fc030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
GPT Backup Header: offset = 52428288, size = 512 bytes.
031ffe00 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00
-031ffe10 75 e0 4c 4f 00 00 00 00 ff 8f 01 00 00 00 00 00
+031ffe10 22 e2 97 b2 00 00 00 00 ff 8f 01 00 00 00 00 00
031ffe20 01 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00
031ffe30 de 8f 01 00 00 00 00 00 99 c3 81 b1 11 47 52 4c
031ffe40 8b 65 9e 76 45 41 21 8d df 8f 01 00 00 00 00 00
-031ffe50 80 00 00 00 80 00 00 00 9f 91 62 10 00 00 00 00
+031ffe50 80 00 00 00 80 00 00 00 25 86 e1 c0 00 00 00 00
031ffe60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
GPT Header: offset = 512, size = 512 bytes.
00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00
-00000210 cc 5a ce cf 00 00 00 00 01 00 00 00 00 00 00 00
+00000210 9b 58 15 32 00 00 00 00 01 00 00 00 00 00 00 00
00000220 ff 8f 01 00 00 00 00 00 00 08 00 00 00 00 00 00
00000230 de 8f 01 00 00 00 00 00 99 c3 81 b1 11 47 52 4c
00000240 8b 65 9e 76 45 41 21 8d 02 00 00 00 00 00 00 00
-00000250 80 00 00 00 80 00 00 00 9f 91 62 10 00 00 00 00
+00000250 80 00 00 00 80 00 00 00 25 86 e1 c0 00 00 00 00
00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
*
00000600 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4
00000610 d7 5b 15 60 d8 bf 8c 4e b8 00 22 19 00 77 93 73
-00000620 00 a8 00 00 00 00 00 00 de 8f 01 00 00 00 00 00
+00000620 00 a8 00 00 00 00 00 00 ff 87 01 00 00 00 00 00
00000630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
*
031fc000 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4
031fc010 d7 5b 15 60 d8 bf 8c 4e b8 00 22 19 00 77 93 73
-031fc020 00 a8 00 00 00 00 00 00 de 8f 01 00 00 00 00 00
+031fc020 00 a8 00 00 00 00 00 00 ff 87 01 00 00 00 00 00
031fc030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
GPT Backup Header: offset = 52428288, size = 512 bytes.
031ffe00 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00
-031ffe10 75 e0 4c 4f 00 00 00 00 ff 8f 01 00 00 00 00 00
+031ffe10 22 e2 97 b2 00 00 00 00 ff 8f 01 00 00 00 00 00
031ffe20 01 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00
031ffe30 de 8f 01 00 00 00 00 00 99 c3 81 b1 11 47 52 4c
031ffe40 8b 65 9e 76 45 41 21 8d df 8f 01 00 00 00 00 00
-031ffe50 80 00 00 00 80 00 00 00 9f 91 62 10 00 00 00 00
+031ffe50 80 00 00 00 80 00 00 00 25 86 e1 c0 00 00 00 00
031ffe60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
Disk identifier: <removed>
Device Start End Sectors Size Type
-<removed>1 2048 102366 100319 49M Linux filesystem
+<removed>1 2048 100351 98304 48M Linux filesystem
The partition table has been altered.
Old situation:
Device Start End Sectors Size Type
-<removed>1 2048 102366 100319 49M Linux filesystem
+<removed>1 2048 100351 98304 48M Linux filesystem
>>> Created a new disklabel.
<removed>1: Created a new partition <removed>.
Disk identifier: <removed>
Device Start End Sectors Size Type
-<removed>1 2048 102366 100319 49M Linux filesystem
+<removed>1 2048 100351 98304 48M Linux filesystem
The partition table has been altered.
Old situation:
Device Start End Sectors Size Type
-<removed>1 2048 102366 100319 49M Linux filesystem
+<removed>1 2048 100351 98304 48M Linux filesystem
>>> Created a new disklabel.
<removed>1: Created a new partition <removed>.
Disk identifier: <removed>
Device Start End Sectors Size Type
-<removed>1 2048 102366 100319 49M Linux filesystem
+<removed>1 2048 100351 98304 48M Linux filesystem
The partition table has been altered.
Calling ioctl() to re-read partition table.
Disk identifier: <removed>
Device Start End Sectors Size Type
-<removed>1 2048 102366 100319 49M Linux filesystem
+<removed>1 2048 100351 98304 48M Linux filesystem
Filesystem/RAID signature on partition 1 will be wiped.