mirror of
https://github.com/kdave/btrfs-progs
synced 2025-01-11 08:19:32 +00:00
Btrfs-progs: add btrfsck functionality to btrfs
This patch includes the functionality of btrfs, it's found as "btrfs check". Signed-off-by: Ian Kumlien <pomac@demius.net> Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
parent
fac45410e9
commit
5956f752c6
8
Makefile
8
Makefile
@ -8,7 +8,7 @@ objects = ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o \
|
||||
send-stream.o send-utils.o qgroup.o raid6.o
|
||||
cmds_objects = cmds-subvolume.o cmds-filesystem.o cmds-device.o cmds-scrub.o \
|
||||
cmds-inspect.o cmds-balance.o cmds-send.o cmds-receive.o \
|
||||
cmds-quota.o cmds-qgroup.o cmds-replace.o
|
||||
cmds-quota.o cmds-qgroup.o cmds-replace.o cmds-check.o
|
||||
|
||||
CHECKFLAGS= -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise \
|
||||
-Wuninitialized -Wshadow -Wundef
|
||||
@ -35,7 +35,7 @@ endif
|
||||
|
||||
MAKEOPTS = --no-print-directory Q=$(Q)
|
||||
|
||||
progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol btrfsck \
|
||||
progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol \
|
||||
btrfs btrfs-map-logical btrfs-image btrfs-zero-log btrfs-convert \
|
||||
btrfs-find-root btrfs-restore btrfstune btrfs-show-super
|
||||
|
||||
@ -110,10 +110,6 @@ btrfs-show: $(objects) btrfs-show.o
|
||||
@echo " [LD] $@"
|
||||
$(Q)$(CC) $(CFLAGS) -o btrfs-show btrfs-show.o $(objects) $(LDFLAGS) $(LIBS)
|
||||
|
||||
btrfsck: $(objects) btrfsck.o
|
||||
@echo " [LD] $@"
|
||||
$(Q)$(CC) $(CFLAGS) -o btrfsck btrfsck.o $(objects) $(LDFLAGS) $(LIBS)
|
||||
|
||||
mkfs.btrfs: $(objects) mkfs.o
|
||||
@echo " [LD] $@"
|
||||
$(Q)$(CC) $(CFLAGS) -o mkfs.btrfs $(objects) mkfs.o $(LDFLAGS) $(LIBS) -lblkid
|
||||
|
1
btrfs.c
1
btrfs.c
@ -246,6 +246,7 @@ const struct cmd_group btrfs_cmd_group = {
|
||||
{ "balance", cmd_balance, NULL, &balance_cmd_group, 0 },
|
||||
{ "device", cmd_device, NULL, &device_cmd_group, 0 },
|
||||
{ "scrub", cmd_scrub, NULL, &scrub_cmd_group, 0 },
|
||||
{ "check", cmd_check, cmd_check_usage, NULL, 0 },
|
||||
{ "inspect-internal", cmd_inspect, NULL, &inspect_cmd_group, 0 },
|
||||
{ "send", cmd_send, cmd_send_usage, NULL, 0 },
|
||||
{ "receive", cmd_receive, cmd_receive_usage, NULL, 0 },
|
||||
|
40
cmds-check.c
40
cmds-check.c
@ -37,6 +37,7 @@
|
||||
#include "list.h"
|
||||
#include "version.h"
|
||||
#include "utils.h"
|
||||
#include "commands.h"
|
||||
|
||||
static u64 bytes_used = 0;
|
||||
static u64 total_csum_bytes = 0;
|
||||
@ -3529,13 +3530,6 @@ static int check_extents(struct btrfs_trans_handle *trans,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void print_usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: btrfsck dev\n");
|
||||
fprintf(stderr, "%s\n", BTRFS_BUILD_VERSION);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static struct option long_options[] = {
|
||||
{ "super", 1, NULL, 's' },
|
||||
{ "repair", 0, NULL, 0 },
|
||||
@ -3544,7 +3538,18 @@ static struct option long_options[] = {
|
||||
{ 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
int main(int ac, char **av)
|
||||
const char * const cmd_check_usage[] = {
|
||||
"btrfs check [options] <device>",
|
||||
"Check an unmounted btrfs filesystem.",
|
||||
"",
|
||||
"-s|--super <superblock> use this superblock copy",
|
||||
"--repair try to repair the filesystem",
|
||||
"--init-csum-tree create a new CRC tree",
|
||||
"--init-extent-tree create a new extent tree",
|
||||
NULL
|
||||
};
|
||||
|
||||
int cmd_check(int argc, char **argv)
|
||||
{
|
||||
struct cache_tree root_cache;
|
||||
struct btrfs_root *root;
|
||||
@ -3561,7 +3566,7 @@ int main(int ac, char **av)
|
||||
|
||||
while(1) {
|
||||
int c;
|
||||
c = getopt_long(ac, av, "as:", long_options,
|
||||
c = getopt_long(argc, argv, "as:", long_options,
|
||||
&option_index);
|
||||
if (c < 0)
|
||||
break;
|
||||
@ -3574,7 +3579,8 @@ int main(int ac, char **av)
|
||||
(unsigned long long)bytenr);
|
||||
break;
|
||||
case '?':
|
||||
print_usage();
|
||||
case 'h':
|
||||
usage(cmd_check_usage);
|
||||
}
|
||||
if (option_index == 1) {
|
||||
printf("enabling repair mode\n");
|
||||
@ -3587,25 +3593,25 @@ int main(int ac, char **av)
|
||||
}
|
||||
|
||||
}
|
||||
ac = ac - optind;
|
||||
argc = argc - optind;
|
||||
|
||||
if (ac != 1)
|
||||
print_usage();
|
||||
if (argc != 1)
|
||||
usage(cmd_check_usage);
|
||||
|
||||
radix_tree_init();
|
||||
cache_tree_init(&root_cache);
|
||||
|
||||
if((ret = check_mounted(av[optind])) < 0) {
|
||||
if((ret = check_mounted(argv[optind])) < 0) {
|
||||
fprintf(stderr, "Could not check mount status: %s\n", strerror(-ret));
|
||||
return ret;
|
||||
} else if(ret) {
|
||||
fprintf(stderr, "%s is currently mounted. Aborting.\n", av[optind]);
|
||||
fprintf(stderr, "%s is currently mounted. Aborting.\n", argv[optind]);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
info = open_ctree_fs_info(av[optind], bytenr, rw, 1);
|
||||
info = open_ctree_fs_info(argv[optind], bytenr, rw, 1);
|
||||
uuid_unparse(info->super_copy.fsid, uuidbuf);
|
||||
printf("Checking filesystem on %s\nUUID: %s\n", av[optind], uuidbuf);
|
||||
printf("Checking filesystem on %s\nUUID: %s\n", argv[optind], uuidbuf);
|
||||
|
||||
if (info == NULL)
|
||||
return 1;
|
||||
|
@ -94,11 +94,14 @@ extern const struct cmd_group replace_cmd_group;
|
||||
extern const char * const cmd_send_usage[];
|
||||
extern const char * const cmd_receive_usage[];
|
||||
|
||||
extern const char * const cmd_check_usage[];
|
||||
|
||||
int cmd_subvolume(int argc, char **argv);
|
||||
int cmd_filesystem(int argc, char **argv);
|
||||
int cmd_balance(int argc, char **argv);
|
||||
int cmd_device(int argc, char **argv);
|
||||
int cmd_scrub(int argc, char **argv);
|
||||
int cmd_check(int argc, char **argv);
|
||||
int cmd_inspect(int argc, char **argv);
|
||||
int cmd_send(int argc, char **argv);
|
||||
int cmd_receive(int argc, char **argv);
|
||||
|
Loading…
Reference in New Issue
Block a user