Ajuda - Busca - Membros - Calendário
Versão Completa: Checar CD/DVD
Hangar Network Forum > Miscelânea > Hangarix
Psycopata
Alguém conhece um programa ou um comanda para checar CD/DVD?

Assim, eu tô com um dvd de jogo, só que na metade do jogo o videogame não consegue mais ler. Só quie como um amigo meu já zerou o jogo, então eu estou achando que houve perda de dados por causa do tempo. Então eu quero verificar isso.
Magus
Embora não seja uma solução elegante por envolver escrita desnecessária, basta copiar o conteúdo do DVD para um HD...
Ácido
Você pode ver isso pelo md5sum.
Psycopata
QUOTE(Magus @ Jan 23 2008, 05:25 PM) *
Embora não seja uma solução elegante por envolver escrita desnecessária, basta copiar o conteúdo do DVD para um HD...


É verdade. Mas eu tô sem espaço em disco.

Ácido, check sum não funciona com DVD de videogame, né hehehehehe.
Nâo tem check sum
Magus
hmmm
Dá para fazer um programa que tenta ler todos os arquivos do DVD. hehe

Update: resolví me divertir um pouco:

CODE
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

public class ReadabilityTest {

    public static final int BUFFER_SIZE = 4096;

    public static void main(String[] args) {
        String path = null;
        try {
            path = args[0];
        } catch (ArrayIndexOutOfBoundsException e) {
            path = System.getProperty("user.dir");
        }

        int unreadableFileCount = 0;
        byte[] buffer = new byte[BUFFER_SIZE];
        Iterator fileIterator = FileUtils.iterateFiles(new File(path), null, true);
        while (fileIterator.hasNext()) {
            File file = (File) fileIterator.next();
            FileInputStream stream = null;
            try {
                stream = FileUtils.openInputStream(file);
                System.out.print("\"" + file.getAbsolutePath() + "\" opened.");
                while (stream.read(buffer) != -1) {
                    // keep reading
                }
                System.out.println("    OK!");
            } catch (IOException e) {
                unreadableFileCount++;
                System.err.println();
                System.err.println(e);
            } finally {
                IOUtils.closeQuietly(stream);
            }
        }

        System.out.println("Unreadable files: " + unreadableFileCount);
    }
}


Requer Commons-IO (não sei se é correto distribuir só o JAR dele, então...).

Código fonte e bytecodes no ZIP em anexo. Caso prefiras compilar tu mesmo, javac -classpath commons-io-1.4.jar ReadabilityTest.java. Para executar, java -cp commons-io-1.4.jar ReadabilityTest [path]. Talvez seja preciso pôr o diretório corrente no classpath (java -cp ./:commons-io-1.4.jar ReadabilityTest [path] (em Unix é : ao invés de wink.gif). path é o parâmetro opcional que indica onde que deve ser feita a "varredura" - o padrão é o diretório atual.
Tristan.Gostosão
Se o objetivo eh ler o dvd todo

CODE
dd if=/dev/hdb of=/dev/null bs=4096


Onde /dev/hdb eh o path para o device do seu DVD. Coloquei o buffer do tamanho ai que o magus colocou.

De repente voce pode tentar tambem
CODE
badblocks /dev/hdb

(onde /dev/hdb voce muda para o device do seu dvd), mas nao sei se esse programa funciona muito bem em particoes sem ser ext e/ou em dvds.
Psycopata
Gostei da idéia, magus.

Para que que serve o interator? (tá, vou olhar no help)


Mas magus, se isso conseguir ler TODOS os arquivos do DVD, então, dar para eu tirar uma cópia do DVD no estilo cloneCD. Assim posso até pegar um DVD original e ele copia.


Agora, pensando bom, pq que eu nunca pensei em pesquisa sobre isso? heheh
Magus
java.util.Iterator é uma classe de objetos descartáveis de iteração seqüencial unidirecional. No caso, org.apache.commons.io.FileUtils.iterateFiles(...) está retornando um Iterator que passa por todos os arquivos no caminho especificado, recursivamente (funciona também se for especificado somente um arquivo).

Esse approach de ler o conteúdo de todos os arquivos no DVD tem certas limitações que em determinados casos tornam-o inadequado. Nem sempre todos os dados pertinentes são acessíveis por registros (entries) em um sistema de arquivos. Seria melhor ler RAW data, mas não sei programar isto. Também não sei se subchannel data entra na categoria RAW data ou é algo à parte - relevante no caso de jogos com proteções (e.g. Safedisc, Securom, Laserlok), embora de qualquer modo as versões mais recentes sejam fisicamente intratáveis pelo menos pela maioria dos leitores e a única saída seja crackear o jogo instalado no HD ou quando carregado em memória. No caso de DVD de filmes, se houver CSS (proteção), deve ser necessário quebrá-la (e.g. AnyDVD) para que o programa seja interessante.

Update: tá pensando em gravar DVD por um programa em Java? ohmy.gif hehe Um jeito seria usar JNI e interfacear com a API do Nero... (mas isso é Windows tongue.gif)
Tristan.Gostosão
QUOTE(Psycopata @ Jan 25 2008, 11:22 PM) *
Gostei da idéia, magus.

Para que que serve o interator? (tá, vou olhar no help)
Mas magus, se isso conseguir ler TODOS os arquivos do DVD, então, dar para eu tirar uma cópia do DVD no estilo cloneCD. Assim posso até pegar um DVD original e ele copia.
Agora, pensando bom, pq que eu nunca pensei em pesquisa sobre isso? heheh

O dd copia do mesmo jeito, mas nem sempre funciona para copiar cds originais, nao sei porque.
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2009 Invision Power Services, Inc.