mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-17 05:40:13 +01:00
Print blkid scan failure.
If old util-linux is used, blkid scan can fail because disk is already locked for OPAL. Do the same for other internal blkid issue. Also add some debug messages to be clear what's going on.
This commit is contained in:
@@ -207,8 +207,11 @@ static int action_open_plain(void)
|
||||
if (!ARG_UINT64(OPT_OFFSET_ID)) {
|
||||
/* Print all present signatures in read-only mode */
|
||||
r = tools_detect_signatures(action_argv[0], PRB_FILTER_NONE, &signatures, ARG_SET(OPT_BATCH_MODE_ID));
|
||||
if (r < 0)
|
||||
if (r < 0) {
|
||||
if (r == -EIO)
|
||||
log_err(_("Blkid scan failed for %s."), action_argv[0]);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (signatures && !ARG_SET(OPT_BATCH_MODE_ID)) {
|
||||
@@ -1303,8 +1306,11 @@ static int action_luksRepair(void)
|
||||
}
|
||||
|
||||
r = tools_detect_signatures(action_argv[0], PRB_FILTER_LUKS, NULL, ARG_SET(OPT_BATCH_MODE_ID));
|
||||
if (r < 0)
|
||||
if (r < 0) {
|
||||
if (r == -EIO)
|
||||
log_err(_("Blkid scan failed for %s."), action_argv[0]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!ARG_SET(OPT_BATCH_MODE_ID) &&
|
||||
!yesDialog(_("Really try to repair LUKS device header?"),
|
||||
@@ -1490,8 +1496,11 @@ int luksFormat(struct crypt_device **r_cd, char **r_password, size_t *r_password
|
||||
|
||||
/* Print all present signatures in read-only mode */
|
||||
r = tools_detect_signatures(header_device, PRB_FILTER_NONE, &signatures, ARG_SET(OPT_BATCH_MODE_ID));
|
||||
if (r < 0)
|
||||
if (r < 0) {
|
||||
if (r == -EIO)
|
||||
log_err(_("Blkid scan failed for %s."), header_device);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!created && !ARG_SET(OPT_BATCH_MODE_ID)) {
|
||||
r = asprintf(&msg, _("This will overwrite data on %s irrevocably."), header_device);
|
||||
|
||||
@@ -191,8 +191,11 @@ static int action_format(void)
|
||||
}
|
||||
|
||||
r = tools_detect_signatures(action_argv[0], PRB_FILTER_NONE, &signatures, ARG_SET(OPT_BATCH_MODE_ID));
|
||||
if (r < 0)
|
||||
if (r < 0) {
|
||||
if (r == -EIO)
|
||||
log_err(_("Blkid scan failed for %s."), action_argv[0]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Signature candidates found */
|
||||
if (signatures && ((r = tools_wipe_all_signatures(action_argv[0], true, false)) < 0))
|
||||
|
||||
@@ -222,17 +222,22 @@ int tools_detect_signatures(const char *device, tools_probe_filter_info filter,
|
||||
|
||||
switch (filter) {
|
||||
case PRB_FILTER_LUKS:
|
||||
log_dbg("Blkid check (filter LUKS).");
|
||||
if (blk_superblocks_filter_luks(h)) {
|
||||
r = -EINVAL;
|
||||
log_dbg("Blkid filter LUKS probe failed.");
|
||||
goto out;
|
||||
}
|
||||
/* fall-through */
|
||||
case PRB_FILTER_NONE:
|
||||
log_dbg("Blkid check (filter none).");
|
||||
blk_set_chains_for_full_print(h);
|
||||
break;
|
||||
case PRB_ONLY_LUKS:
|
||||
log_dbg("Blkid check (LUKS only).");
|
||||
blk_set_chains_for_fast_detection(h);
|
||||
if (blk_superblocks_only_luks(h)) {
|
||||
log_dbg("Blkid only LUKS probe failed.");
|
||||
r = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
@@ -251,8 +256,11 @@ int tools_detect_signatures(const char *device, tools_probe_filter_info filter,
|
||||
(*count)++;
|
||||
}
|
||||
|
||||
if (pr == PRB_FAIL)
|
||||
r = -EINVAL;
|
||||
if (pr == PRB_FAIL) {
|
||||
/* Expect device cannot be read */
|
||||
r = -EIO;
|
||||
log_dbg("Blkid probe failed.");
|
||||
}
|
||||
out:
|
||||
blk_free(h);
|
||||
return r;
|
||||
@@ -302,6 +310,8 @@ int tools_wipe_all_signatures(const char *path, bool exclusive, bool only_luks)
|
||||
goto out;
|
||||
}
|
||||
|
||||
log_dbg("Blkid wipe.");
|
||||
|
||||
while ((pr = blk_probe(h)) < PRB_EMPTY) {
|
||||
if (blk_is_partition(h))
|
||||
log_verbose(_("Existing '%s' partition signature on device %s will be wiped."),
|
||||
|
||||
@@ -1329,8 +1329,11 @@ static int check_broken_luks_signature(const char *device)
|
||||
size_t count;
|
||||
|
||||
r = tools_detect_signatures(device, PRB_ONLY_LUKS, &count, ARG_SET(OPT_BATCH_MODE_ID));
|
||||
if (r < 0)
|
||||
if (r < 0) {
|
||||
if (r == -EIO)
|
||||
log_err(_("Blkid scan failed for %s."), device);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (count) {
|
||||
log_err(_("Device %s contains broken LUKS metadata. Aborting operation."), device);
|
||||
return -EINVAL;
|
||||
|
||||
Reference in New Issue
Block a user