Lines Matching +full:ppi +full:- +full:partitions

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
101 if (strcmp(fstype, "freebsd-ufs") == 0) { in newfs_command()
110 "Enable file system journaling (default - " in newfs_command()
113 "Enable TRIM support, useful on solid-state " in newfs_command()
131 fputs("-O1 ", fp); in newfs_command()
133 fputs("-U ", fp); in newfs_command()
135 fputs("-j ", fp); in newfs_command()
137 fputs("-t ", fp); in newfs_command()
139 } else if (strcmp(fstype, "freebsd-zfs") == 0) { in newfs_command()
164 fputs("zpool create -f -m none ", fp); in newfs_command()
172 fprintf(fp, " -o cachefile=%s/zpool.cache ", in newfs_command()
179 fputs("-O checksum=fletcher4 ", fp); in newfs_command()
181 fputs("-O checksum=fletcher2 ", fp); in newfs_command()
183 fputs("-O checksum=sha256 ", fp); in newfs_command()
185 fputs("-O atime=off ", fp); in newfs_command()
188 strcmp(fstype, "ms-basic-data") == 0) { in newfs_command()
213 fputs("-F 32 -c 1", fp); in newfs_command()
215 fputs("-F 16 ", fp); in newfs_command()
217 fputs("-F 12 ", fp); in newfs_command()
246 {"", false, 0, "MBR", "DOS Partitions", in choose_part_type()
300 return (-1); in gpart_partition()
322 gctl_ro_param(r, "class", -1, "PART"); in gpart_partition()
323 gctl_ro_param(r, "arg0", -1, lg_name); in gpart_partition()
324 gctl_ro_param(r, "flags", -1, GPART_FLAGS); in gpart_partition()
325 gctl_ro_param(r, "scheme", -1, scheme); in gpart_partition()
326 gctl_ro_param(r, "verb", -1, "create"); in gpart_partition()
338 get_part_metadata(lg_name, 1)->bootcode = 1; in gpart_partition()
355 LIST_FOREACH(gc, &pp->lg_geom->lg_config, lg_config) { in gpart_activate()
356 if (strcmp(gc->lg_name, "scheme") == 0) { in gpart_activate()
357 scheme = gc->lg_val; in gpart_activate()
367 LIST_FOREACH(gc, &pp->lg_config, lg_config) { in gpart_activate()
368 if (strcmp(gc->lg_name, "index") == 0) { in gpart_activate()
369 idx = atoi(gc->lg_val); in gpart_activate()
375 gctl_ro_param(r, "class", -1, "PART"); in gpart_activate()
376 gctl_ro_param(r, "arg0", -1, pp->lg_geom->lg_name); in gpart_activate()
377 gctl_ro_param(r, "verb", -1, "set"); in gpart_activate()
378 gctl_ro_param(r, "attrib", -1, attribute); in gpart_activate()
395 gctl_ro_param(r, "class", -1, "PART"); in gpart_set_root()
396 gctl_ro_param(r, "arg0", -1, lg_name); in gpart_set_root()
397 gctl_ro_param(r, "flags", -1, "C"); in gpart_set_root()
398 gctl_ro_param(r, "verb", -1, "set"); in gpart_set_root()
399 gctl_ro_param(r, "attrib", -1, attribute); in gpart_set_root()
424 LIST_FOREACH(gc, &gp->lg_config, lg_config) { in gpart_bootcode()
425 if (strcmp(gc->lg_name, "scheme") == 0) { in gpart_bootcode()
426 scheme = gc->lg_val; in gpart_bootcode()
448 bytes += read(bootfd, boot + bytes, bootsize - bytes); in gpart_bootcode()
452 gctl_ro_param(r, "class", -1, "PART"); in gpart_bootcode()
453 gctl_ro_param(r, "arg0", -1, gp->lg_name); in gpart_bootcode()
454 gctl_ro_param(r, "verb", -1, "bootcode"); in gpart_bootcode()
473 LIST_FOREACH(gc, &pp->lg_geom->lg_config, lg_config) { in gpart_partcode()
474 if (strcmp(gc->lg_name, "scheme") == 0) { in gpart_partcode()
475 scheme = gc->lg_val; in gpart_partcode()
484 LIST_FOREACH(gc, &pp->lg_config, lg_config) { in gpart_partcode()
485 if (strcmp(gc->lg_name, "index") == 0) { in gpart_partcode()
486 indexstr = gc->lg_val; in gpart_partcode()
492 snprintf(command, sizeof(command), "gpart bootcode -p %s -i %s %s", in gpart_partcode()
493 partcode_path(scheme, fstype), indexstr, pp->lg_geom->lg_name); in gpart_partcode()
497 pp->lg_name); in gpart_partcode()
513 LIST_FOREACH(pp, &lg_geom->lg_provider, lg_provider) in gpart_destroy()
518 gctl_ro_param(r, "class", -1, "PART"); in gpart_destroy()
519 gctl_ro_param(r, "arg0", -1, lg_geom->lg_name); in gpart_destroy()
520 gctl_ro_param(r, "verb", -1, "undo"); in gpart_destroy()
521 gctl_issue(r); /* Ignore errors -- these are non-fatal */ in gpart_destroy()
526 gctl_ro_param(r, "class", -1, "PART"); in gpart_destroy()
527 gctl_ro_param(r, "arg0", -1, lg_geom->lg_name); in gpart_destroy()
528 gctl_ro_param(r, "flags", -1, GPART_FLAGS); in gpart_destroy()
530 gctl_ro_param(r, "verb", -1, "destroy"); in gpart_destroy()
543 delete_part_metadata(lg_geom->lg_name); in gpart_destroy()
564 "Filesystem type (e.g. freebsd-ufs, freebsd-zfs, " in gpart_edit()
565 "freebsd-swap)"}, in gpart_edit()
583 LIST_FOREACH(cp, &pp->lg_consumers, lg_consumers) in gpart_edit()
584 if (strcmp(cp->lg_geom->lg_class->lg_name, "PART") == 0) { in gpart_edit()
587 LIST_FOREACH(gc, &cp->lg_geom->lg_config, lg_config) { in gpart_edit()
588 if (strcmp(gc->lg_name, "scheme") == 0) { in gpart_edit()
589 scheme = gc->lg_val; in gpart_edit()
594 gpart_partition(cp->lg_geom->lg_name, NULL); in gpart_edit()
599 if (strcmp(pp->lg_geom->lg_class->lg_name, "PART") == 0) in gpart_edit()
602 /* Destroy the geom and all sub-partitions */ in gpart_edit()
603 gpart_destroy(cp->lg_geom); in gpart_edit()
605 /* Now re-partition and return */ in gpart_edit()
606 gpart_partition(cp->lg_geom->lg_name, NULL); in gpart_edit()
610 if (geom == NULL && strcmp(pp->lg_geom->lg_class->lg_name, "PART") == 0) in gpart_edit()
611 geom = pp->lg_geom; in gpart_edit()
615 gpart_partition(pp->lg_name, NULL); in gpart_edit()
619 LIST_FOREACH(gc, &geom->lg_config, lg_config) { in gpart_edit()
620 if (strcmp(gc->lg_name, "scheme") == 0) { in gpart_edit()
621 scheme = gc->lg_val; in gpart_edit()
630 LIST_FOREACH(gc, &pp->lg_config, lg_config) { in gpart_edit()
631 if (strcmp(gc->lg_name, "type") == 0) { in gpart_edit()
632 oldtype = gc->lg_val; in gpart_edit()
633 items[0].init = gc->lg_val; in gpart_edit()
635 if (strcmp(gc->lg_name, "label") == 0 && gc->lg_val != NULL) { in gpart_edit()
637 items[3].init = gc->lg_val; in gpart_edit()
639 if (strcmp(gc->lg_name, "index") == 0) in gpart_edit()
640 idx = atoi(gc->lg_val); in gpart_edit()
644 if (md->name != NULL && strcmp(md->name, pp->lg_name) == 0) { in gpart_edit()
645 if (md->fstab != NULL) in gpart_edit()
646 items[2].init = md->fstab->fs_file; in gpart_edit()
651 humanize_number(sizestr, 7, pp->lg_mediasize, "B", HN_AUTOSCALE, in gpart_edit()
690 gctl_ro_param(r, "class", -1, "PART"); in gpart_edit()
691 gctl_ro_param(r, "arg0", -1, geom->lg_name); in gpart_edit()
692 gctl_ro_param(r, "flags", -1, GPART_FLAGS); in gpart_edit()
693 gctl_ro_param(r, "verb", -1, "modify"); in gpart_edit()
696 gctl_ro_param(r, "label", -1, items[3].value); in gpart_edit()
697 gctl_ro_param(r, "type", -1, items[0].value); in gpart_edit()
707 set_default_part_metadata(pp->lg_name, scheme, items[0].value, in gpart_edit()
714 gpart_destroy(cp->lg_geom); in gpart_edit()
717 gpart_partition(pp->lg_name, "BSD"); in gpart_edit()
737 if (md->newfs != NULL) { in set_default_part_metadata()
738 free(md->newfs); in set_default_part_metadata()
739 md->newfs = NULL; in set_default_part_metadata()
743 if (strcmp("freebsd-zfs", type) == 0) { in set_default_part_metadata()
749 asprintf(&md->newfs, "%s %s /dev/%s", newfs, in set_default_part_metadata()
752 asprintf(&md->newfs, "%s /dev/%s", newfs, name); in set_default_part_metadata()
757 if (strcmp(type, "freebsd-swap") == 0) in set_default_part_metadata()
761 md->bootcode = 1; in set_default_part_metadata()
767 if (md->fstab != NULL) { in set_default_part_metadata()
768 free(md->fstab->fs_spec); in set_default_part_metadata()
769 free(md->fstab->fs_file); in set_default_part_metadata()
770 free(md->fstab->fs_vfstype); in set_default_part_metadata()
771 free(md->fstab->fs_mntops); in set_default_part_metadata()
772 free(md->fstab->fs_type); in set_default_part_metadata()
773 free(md->fstab); in set_default_part_metadata()
774 md->fstab = NULL; in set_default_part_metadata()
777 if (md->fstab == NULL) { in set_default_part_metadata()
778 md->fstab = malloc(sizeof(struct fstab)); in set_default_part_metadata()
780 free(md->fstab->fs_spec); in set_default_part_metadata()
781 free(md->fstab->fs_file); in set_default_part_metadata()
782 free(md->fstab->fs_vfstype); in set_default_part_metadata()
783 free(md->fstab->fs_mntops); in set_default_part_metadata()
784 free(md->fstab->fs_type); in set_default_part_metadata()
786 if (strcmp("freebsd-zfs", type) == 0) { in set_default_part_metadata()
787 md->fstab->fs_spec = strdup(zpool_name); in set_default_part_metadata()
789 asprintf(&md->fstab->fs_spec, "/dev/%s", name); in set_default_part_metadata()
791 md->fstab->fs_file = strdup(mountpoint); in set_default_part_metadata()
792 /* Get VFS from text after freebsd-, if possible */ in set_default_part_metadata()
793 if (strncmp("freebsd-", type, 8) == 0) in set_default_part_metadata()
794 md->fstab->fs_vfstype = strdup(&type[8]); in set_default_part_metadata()
796 || strcmp("ms-basic-data", type) == 0) in set_default_part_metadata()
797 md->fstab->fs_vfstype = strdup("msdosfs"); in set_default_part_metadata()
799 md->fstab->fs_vfstype = strdup(type); /* Guess */ in set_default_part_metadata()
800 if (strcmp(type, "freebsd-swap") == 0) { in set_default_part_metadata()
801 md->fstab->fs_type = strdup(FSTAB_SW); in set_default_part_metadata()
802 md->fstab->fs_freq = 0; in set_default_part_metadata()
803 md->fstab->fs_passno = 0; in set_default_part_metadata()
804 } else if (strcmp(type, "freebsd-zfs") == 0) { in set_default_part_metadata()
805 md->fstab->fs_type = strdup(FSTAB_RW); in set_default_part_metadata()
806 md->fstab->fs_freq = 0; in set_default_part_metadata()
807 md->fstab->fs_passno = 0; in set_default_part_metadata()
809 md->fstab->fs_type = strdup(FSTAB_RW); in set_default_part_metadata()
811 md->fstab->fs_freq = 1; in set_default_part_metadata()
812 md->fstab->fs_passno = 1; in set_default_part_metadata()
814 md->fstab->fs_freq = 2; in set_default_part_metadata()
815 md->fstab->fs_passno = 2; in set_default_part_metadata()
818 md->fstab->fs_mntops = strdup(md->fstab->fs_type); in set_default_part_metadata()
834 LIST_FOREACH(gc, &(*a)->lg_config, lg_config) in part_compare()
835 if (strcmp(gc->lg_name, "start") == 0) { in part_compare()
836 astart = strtoimax(gc->lg_val, NULL, 0); in part_compare()
839 LIST_FOREACH(gc, &(*b)->lg_config, lg_config) in part_compare()
840 if (strcmp(gc->lg_name, "start") == 0) { in part_compare()
841 bstart = strtoimax(gc->lg_val, NULL, 0); in part_compare()
846 return -1; in part_compare()
867 LIST_FOREACH(gc, &geom->lg_config, lg_config) { in gpart_max_free()
868 if (strcmp(gc->lg_name, "first") == 0) in gpart_max_free()
869 start = strtoimax(gc->lg_val, NULL, 0); in gpart_max_free()
870 if (strcmp(gc->lg_name, "last") == 0) in gpart_max_free()
871 end = strtoimax(gc->lg_val, NULL, 0); in gpart_max_free()
875 LIST_FOREACH(pp, &geom->lg_provider, lg_provider) in gpart_max_free()
878 LIST_FOREACH(pp, &geom->lg_provider, lg_provider) in gpart_max_free()
882 lastend = start - 1; in gpart_max_free()
887 LIST_FOREACH(gc, &pp->lg_config, lg_config) { in gpart_max_free()
888 if (strcmp(gc->lg_name, "start") == 0) in gpart_max_free()
889 partstart = strtoimax(gc->lg_val, NULL, 0); in gpart_max_free()
890 if (strcmp(gc->lg_name, "end") == 0) in gpart_max_free()
891 partend = strtoimax(gc->lg_val, NULL, 0); in gpart_max_free()
894 if (partstart - lastend > maxsize) { in gpart_max_free()
895 maxsize = partstart - lastend - 1; in gpart_max_free()
902 if (end - lastend > maxsize) { in gpart_max_free()
903 maxsize = end - lastend; in gpart_max_free()
907 pp = LIST_FIRST(&geom->lg_consumer)->lg_provider; in gpart_max_free()
916 * disks often have 4096-byte physical sectors but report 512 in gpart_max_free()
919 * may also report a 512-byte stripe size, or none at all. in gpart_max_free()
921 sectorsize = pp->lg_sectorsize; in gpart_max_free()
922 if ((stripesize = pp->lg_stripesize) == 0) in gpart_max_free()
927 offset = (stripesize - offset) / sectorsize; in gpart_max_free()
929 maxsize -= offset; in gpart_max_free()
943 struct gprovider *ppi; in add_boot_partition() local
947 /* Check for existing freebsd-boot partition */ in add_boot_partition()
948 LIST_FOREACH(ppi, &geom->lg_provider, lg_provider) { in add_boot_partition()
952 LIST_FOREACH(gc, &ppi->lg_config, lg_config) in add_boot_partition()
953 if (strcmp(gc->lg_name, "type") == 0) in add_boot_partition()
957 if (strcmp(gc->lg_val, bootpart_type(scheme, &bootmount)) != 0) in add_boot_partition()
964 md = get_part_metadata(ppi->lg_name, 0); in add_boot_partition()
965 if (bootmount == NULL && (md == NULL || !md->bootcode)) in add_boot_partition()
969 if (bootmount != NULL && md != NULL && md->fstab != NULL in add_boot_partition()
970 && strlen(md->fstab->fs_file) > 0 in add_boot_partition()
971 && strcmp(md->fstab->fs_file, bootmount) != 0) in add_boot_partition()
976 set_default_part_metadata(ppi->lg_name, scheme, in add_boot_partition()
977 gc->lg_val, bootmount, NULL); in add_boot_partition()
1013 if (md != NULL && md->newfs != NULL) { in add_boot_partition()
1014 free(md->newfs); in add_boot_partition()
1015 md->newfs = NULL; in add_boot_partition()
1047 {"Type:", 1, 1, "freebsd-ufs", 1, 12, 12, 15, NULL, 0, in gpart_create()
1048 "Filesystem type (e.g. freebsd-ufs, freebsd-zfs, " in gpart_create()
1049 "freebsd-swap)"}, in gpart_create()
1066 sector = pp->lg_sectorsize; in gpart_create()
1067 stripe = pp->lg_stripesize; in gpart_create()
1074 LIST_FOREACH(cp, &pp->lg_consumers, lg_consumers) in gpart_create()
1075 if (strcmp(cp->lg_geom->lg_class->lg_name, "PART") == 0) { in gpart_create()
1076 geom = cp->lg_geom; in gpart_create()
1080 if (geom == NULL && strcmp(pp->lg_geom->lg_class->lg_name, "PART") == 0) in gpart_create()
1081 geom = pp->lg_geom; in gpart_create()
1086 LIST_FOREACH(gc, &geom->lg_config, lg_config) in gpart_create()
1087 if (strcmp(gc->lg_name, "scheme") == 0) in gpart_create()
1088 scheme = gc->lg_val; in gpart_create()
1092 if (gpart_partition(pp->lg_name, NULL) == 0) { in gpart_create()
1095 " Please press Create again to create partitions.", in gpart_create()
1121 /* Special-case the MBR default type for nested partitions */ in gpart_create()
1211 if (strcmp(items[0].value, "freebsd-ufs") == 0 && in gpart_create()
1230 * Error if this scheme needs nested partitions, this is one, and in gpart_create()
1236 bsddialog_msgbox(&conf, "Partitions of type \"freebsd\" are " in gpart_create()
1237 "nested BSD-type partition schemes and cannot have " in gpart_create()
1289 size -= (bytes + stripe)/sector; in gpart_create()
1291 firstfree += (stripe - ((firstfree*sector) % in gpart_create()
1299 gctl_ro_param(r, "class", -1, "PART"); in gpart_create()
1300 gctl_ro_param(r, "arg0", -1, geom->lg_name); in gpart_create()
1301 gctl_ro_param(r, "flags", -1, GPART_FLAGS); in gpart_create()
1302 gctl_ro_param(r, "verb", -1, "add"); in gpart_create()
1304 gctl_ro_param(r, "type", -1, items[0].value); in gpart_create()
1306 gctl_ro_param(r, "size", -1, sizestr); in gpart_create()
1308 gctl_ro_param(r, "start", -1, startstr); in gpart_create()
1310 gctl_ro_param(r, "label", -1, items[3].value); in gpart_create()
1327 gctl_ro_param(r, "class", -1, "PART"); in gpart_create()
1328 gctl_ro_param(r, "arg0", -1, newpartname); in gpart_create()
1329 gctl_ro_param(r, "flags", -1, GPART_FLAGS); in gpart_create()
1332 gctl_ro_param(r, "verb", -1, "destroy"); in gpart_create()
1333 gctl_issue(r); /* Error usually expected and non-fatal */ in gpart_create()
1369 is_partition = (strcmp(pp->lg_geom->lg_class->lg_name, "PART") == 0); in gpart_delete()
1373 LIST_FOREACH(cp, &pp->lg_consumers, lg_consumers) in gpart_delete()
1374 if (strcmp(cp->lg_geom->lg_class->lg_name, "PART") == 0) { in gpart_delete()
1375 geom = cp->lg_geom; in gpart_delete()
1386 gctl_ro_param(r, "class", -1, "PART"); in gpart_delete()
1387 gctl_ro_param(r, "arg0", -1, geom->lg_name); in gpart_delete()
1388 gctl_ro_param(r, "verb", -1, "undo"); in gpart_delete()
1389 gctl_issue(r); /* Ignore non-fatal errors */ in gpart_delete()
1404 "Only partitions can be deleted.", 0, 0); in gpart_delete()
1410 gctl_ro_param(r, "class", -1, pp->lg_geom->lg_class->lg_name); in gpart_delete()
1411 gctl_ro_param(r, "arg0", -1, pp->lg_geom->lg_name); in gpart_delete()
1412 gctl_ro_param(r, "flags", -1, GPART_FLAGS); in gpart_delete()
1413 gctl_ro_param(r, "verb", -1, "delete"); in gpart_delete()
1415 LIST_FOREACH(gc, &pp->lg_config, lg_config) { in gpart_delete()
1416 if (strcmp(gc->lg_name, "index") == 0) { in gpart_delete()
1417 idx = atoi(gc->lg_val); in gpart_delete()
1432 delete_part_metadata(pp->lg_name); in gpart_delete()
1445 LIST_FOREACH(classp, &mesh->lg_class, lg_class) { in gpart_revert_all()
1446 if (strcmp(classp->lg_name, "PART") == 0) in gpart_revert_all()
1450 if (strcmp(classp->lg_name, "PART") != 0) { in gpart_revert_all()
1457 LIST_FOREACH(gp, &classp->lg_geom, lg_geom) { in gpart_revert_all()
1460 LIST_FOREACH(gc, &gp->lg_config, lg_config) { in gpart_revert_all()
1461 if (strcmp(gc->lg_name, "modified") == 0) { in gpart_revert_all()
1462 modified = gc->lg_val; in gpart_revert_all()
1471 gctl_ro_param(r, "class", -1, "PART"); in gpart_revert_all()
1472 gctl_ro_param(r, "arg0", -1, gp->lg_name); in gpart_revert_all()
1473 gctl_ro_param(r, "verb", -1, "undo"); in gpart_revert_all()
1495 LIST_FOREACH(classp, &mesh->lg_class, lg_class) { in gpart_commit()
1496 if (strcmp(classp->lg_name, "PART") == 0) in gpart_commit()
1503 if (md->fstab != NULL && strcmp(md->fstab->fs_file, "/") == 0) { in gpart_commit()
1504 rootfs = md->fstab->fs_vfstype; in gpart_commit()
1509 if (strcmp(classp->lg_name, "PART") != 0) { in gpart_commit()
1516 LIST_FOREACH(gp, &classp->lg_geom, lg_geom) { in gpart_commit()
1519 LIST_FOREACH(gc, &gp->lg_config, lg_config) { in gpart_commit()
1520 if (strcmp(gc->lg_name, "modified") == 0) { in gpart_commit()
1521 modified = gc->lg_val; in gpart_commit()
1530 md = get_part_metadata(gp->lg_name, 0); in gpart_commit()
1531 if (md != NULL && md->bootcode) in gpart_commit()
1534 /* Now install partcode on its partitions, if necessary */ in gpart_commit()
1535 LIST_FOREACH(pp, &gp->lg_provider, lg_provider) { in gpart_commit()
1536 md = get_part_metadata(pp->lg_name, 0); in gpart_commit()
1537 if (md == NULL || !md->bootcode) in gpart_commit()
1543 /* Check if the partition has sub-partitions */ in gpart_commit()
1544 LIST_FOREACH(cp, &pp->lg_consumers, lg_consumers) in gpart_commit()
1545 if (strcmp(cp->lg_geom->lg_class->lg_name, in gpart_commit()
1549 if (cp == NULL) /* No sub-partitions */ in gpart_commit()
1554 gctl_ro_param(r, "class", -1, "PART"); in gpart_commit()
1555 gctl_ro_param(r, "arg0", -1, gp->lg_name); in gpart_commit()
1556 gctl_ro_param(r, "verb", -1, "commit"); in gpart_commit()