New port: sysutils/safecopy

Safecopy is a data recovery tool which tries to extract as much
data as possible from a problematic (i.e. damaged sectors) source -
like floppy drives, hard disk partitions, CDs, tape devices etc, ...
, where other tools like dd would fail due to I/O errors.  Safecopy
includes a low level IO layer to read CDROM disks in raw mode, and
issue device resets and other helpful low level operations on a
number of other device classes.  The project also includes a device
simulator which can be used to simulate bad media for testing and
benchmarking safecopy as well as other data rescue tools.

WWW: http://safecopy.sourceforge.net/

PR:		216892
Submitted by:	anastasios@mageirias.com
Approved by:	mat (mentor)
Differential Revision:	https://reviews.freebsd.org/D9479
This commit is contained in:
Kirill Ponomarev 2017-02-07 20:31:32 +00:00
parent 13760db998
commit 86ea462e43
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=433587
5 changed files with 64 additions and 0 deletions

View File

@ -1010,6 +1010,7 @@
SUBDIR += s6-rc
SUBDIR += safe-rm
SUBDIR += safecat
SUBDIR += safecopy
SUBDIR += samefile
SUBDIR += samesame
SUBDIR += sample

View File

@ -0,0 +1,20 @@
# $FreeBSD$
PORTNAME= safecopy
PORTVERSION= 1.7
CATEGORIES= sysutils
MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTNAME}-${PORTVERSION}/
MAINTAINER= anastasios@mageirias.com
COMMENT= Safe copying of files and partition
LICENSE= GPLv2
LICENSE_FILE= ${WRKSRC}/COPYING
USES= gmake
GNU_CONFIGURE= yes
PLIST_FILES= bin/safecopy \
man/man1/safecopy.1.gz
.include <bsd.port.mk>

View File

@ -0,0 +1,3 @@
TIMESTAMP = 1486492944
SHA256 (safecopy-1.7.tar.gz) = 42fbed5d4764020eb0f34d95e97a0e14e62d801c3ef80f89bd497d94d39cc4fd
SIZE (safecopy-1.7.tar.gz) = 398465

View File

@ -0,0 +1,29 @@
--- src/safecopy.c.orig 2017-02-07 19:49:05 UTC
+++ src/safecopy.c
@@ -900,7 +900,7 @@ int main(int argc, char ** argv) {
fprintf(stdout, "File size: %llu\n", (long long) statusvars->filesize );
} else {
fprintf(stderr, "Filesize not reported by stat(), trying seek().\n");
- statusvars->source = open(configvars->sourcefile, O_RDONLY | O_RSYNC);
+ statusvars->source = open(configvars->sourcefile, O_RDONLY | O_SYNC);
if (statusvars->source) {
statusvars->filesize = lseek(statusvars->source, 0, SEEK_END);
close(statusvars->source);
@@ -1691,7 +1691,7 @@ int main(int argc, char ** argv) {
for ( statusvars->cseeks = 0; statusvars->cseeks < statusvars->seeks ; statusvars->cseeks ++) {
debug(DEBUG_SEEK, "debug: forced head realignment\n");
// note. must use O_RSYNC since with O_DIRECT / raw devices, lseek to end of file might not work
- statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | O_RSYNC );
+ statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | O_SYNC );
if (statusvars->source) {
lseek(statusvars->source, 0, SEEK_SET);
select_for_reading(statusvars->source, configvars, statusvars);
@@ -1699,7 +1699,7 @@ int main(int argc, char ** argv) {
read(statusvars->source, statusvars->databuffer , statusvars->blocksize );
close(statusvars->source);
}
- statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | O_RSYNC );
+ statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | O_SYNC );
if (statusvars->source) {
lseek(statusvars->source,- statusvars->blocksize , SEEK_END);
select_for_reading(statusvars->source, configvars, statusvars);

View File

@ -0,0 +1,11 @@
Safecopy is a data recovery tool which tries to extract as much data as
possible from a problematic (i.e. damaged sectors) source - like floppy drives,
hard disk partitions, CDs, tape devices etc, ... , where other tools like dd
would fail due to I/O errors.
Safecopy includes a low level IO layer to read CDROM disks in raw mode, and
issue device resets and other helpful low level operations on a number of other
device classes.
The project also includes a device simulator which can be used to simulate bad
media for testing and benchmarking safecopy as well as other data rescue tools.
WWW: http://safecopy.sourceforge.net/