mirror of
https://github.com/kdave/btrfs-progs
synced 2025-04-26 13:07:55 +00:00
btrfs-progs: convert: set label or copy from origin
Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
parent
0b90a24e11
commit
56a7ff5775
@ -25,6 +25,10 @@ Ignore xattrs and ACLs.
|
|||||||
Disable packing of small files.
|
Disable packing of small files.
|
||||||
-r::
|
-r::
|
||||||
Roll back to ext2fs.
|
Roll back to ext2fs.
|
||||||
|
-l <LABEL>::
|
||||||
|
set filesystem label during conversion.
|
||||||
|
-L::
|
||||||
|
use label from the converted filesystem.
|
||||||
|
|
||||||
EXIT STATUS
|
EXIT STATUS
|
||||||
-----------
|
-----------
|
||||||
|
@ -2196,8 +2196,8 @@ err:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_convert(const char *devname, int datacsum, int packing,
|
static int do_convert(const char *devname, int datacsum, int packing, int noxattr,
|
||||||
int noxattr)
|
int copylabel, const char *fslabel)
|
||||||
{
|
{
|
||||||
int i, ret;
|
int i, ret;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
@ -2291,6 +2291,17 @@ static int do_convert(const char *devname, int datacsum, int packing,
|
|||||||
fprintf(stderr, "error during create_ext2_image %d\n", ret);
|
fprintf(stderr, "error during create_ext2_image %d\n", ret);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
memset(root->fs_info->super_copy->label, 0, BTRFS_LABEL_SIZE);
|
||||||
|
if (copylabel == 1) {
|
||||||
|
strncpy(root->fs_info->super_copy->label,
|
||||||
|
ext2_fs->super->s_volume_name, 16);
|
||||||
|
fprintf(stderr, "copy label '%s'\n",
|
||||||
|
root->fs_info->super_copy->label);
|
||||||
|
} else if (copylabel == -1) {
|
||||||
|
strncpy(root->fs_info->super_copy->label, fslabel, BTRFS_LABEL_SIZE);
|
||||||
|
fprintf(stderr, "set label to '%s'\n", fslabel);
|
||||||
|
}
|
||||||
|
|
||||||
printf("cleaning up system chunk.\n");
|
printf("cleaning up system chunk.\n");
|
||||||
ret = cleanup_sys_chunk(root, ext2_root);
|
ret = cleanup_sys_chunk(root, ext2_root);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@ -2685,11 +2696,13 @@ fail:
|
|||||||
|
|
||||||
static void print_usage(void)
|
static void print_usage(void)
|
||||||
{
|
{
|
||||||
printf("usage: btrfs-convert [-d] [-i] [-n] [-r] device\n");
|
printf("usage: btrfs-convert [-d] [-i] [-n] [-r] [-l label] [-L] device\n");
|
||||||
printf("\t-d disable data checksum\n");
|
printf("\t-d disable data checksum\n");
|
||||||
printf("\t-i ignore xattrs and ACLs\n");
|
printf("\t-i ignore xattrs and ACLs\n");
|
||||||
printf("\t-n disable packing of small files\n");
|
printf("\t-n disable packing of small files\n");
|
||||||
printf("\t-r roll back to ext2fs\n");
|
printf("\t-r roll back to ext2fs\n");
|
||||||
|
printf("\t-l LABEL set filesystem label\n");
|
||||||
|
printf("\t-L use label from converted fs\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@ -2699,10 +2712,13 @@ int main(int argc, char *argv[])
|
|||||||
int noxattr = 0;
|
int noxattr = 0;
|
||||||
int datacsum = 1;
|
int datacsum = 1;
|
||||||
int rollback = 0;
|
int rollback = 0;
|
||||||
|
int copylabel = 0;
|
||||||
int usage_error = 0;
|
int usage_error = 0;
|
||||||
char *file;
|
char *file;
|
||||||
|
char *fslabel = NULL;
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
int c = getopt(argc, argv, "dinr");
|
int c = getopt(argc, argv, "dinrl:L");
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
switch(c) {
|
switch(c) {
|
||||||
@ -2718,6 +2734,19 @@ int main(int argc, char *argv[])
|
|||||||
case 'r':
|
case 'r':
|
||||||
rollback = 1;
|
rollback = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'l':
|
||||||
|
copylabel = -1;
|
||||||
|
fslabel = strdup(optarg);
|
||||||
|
if (strlen(fslabel) > BTRFS_LABEL_SIZE) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"warning: label too long, trimmed to %d bytes\n",
|
||||||
|
BTRFS_LABEL_SIZE);
|
||||||
|
fslabel[BTRFS_LABEL_SIZE] = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'L':
|
||||||
|
copylabel = 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
print_usage();
|
print_usage();
|
||||||
return 1;
|
return 1;
|
||||||
@ -2755,7 +2784,7 @@ int main(int argc, char *argv[])
|
|||||||
if (rollback) {
|
if (rollback) {
|
||||||
ret = do_rollback(file);
|
ret = do_rollback(file);
|
||||||
} else {
|
} else {
|
||||||
ret = do_convert(file, datacsum, packing, noxattr);
|
ret = do_convert(file, datacsum, packing, noxattr, copylabel, fslabel);
|
||||||
}
|
}
|
||||||
if (ret)
|
if (ret)
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user