2010-01-07 52 views
1

我目前有一個Python應用程序,我正在開發哪個數據雕刻jpeg文件的塊設備。我們只是說它有時起作用,有時不起作用。我創建了它,以便我讀取塊設備,直到找到ffd8,然後保持流打開並通過循環搜索ffd9閉包。儘管在第一次之後,我總是需要考慮所有的ffd9封閉。所以它往往是一個非常密集的操作。給定一個設備,讓我們說25個JPEG和許多其他數據,循環是非常戲劇性的,它運行了很多。數據雕刻循環改進

該計劃不是世界上最慢的事情,但我認爲它可以更快,更高效。我正在尋找更好的方式來搜索塊設備並以更高效的方式提取數據。我也不想殺死HDD或保存塊設備映像的驅動器。

那麼是否有人知道更好的方法來系統地處理數據的搜索和提取?

回答

2

直接讀取塊設備的麻煩在於,不能保證任何給定文件的塊是連續的。這意味着即使你在塊13中找到你的魔術標記字節0xFFD8,也就是說,不能保證塊14屬於同一個文件,不管它是否包含0xFFD9結束標記。 (大多數文件將從塊邊界開始;文件末尾可能在任何地方,甚至可能跨越塊邊界。)

有什麼更好的方法來處理它?那麼這取決於你之後的內容 - 但是如果你只關注當前分配的塊,然後使用POSIX C函數ftw(nftw)的Python模擬來掃描文件系統,並依次讀取每個文件。這不會在免費列表中找到已刪除的JPEG文件的證據 - 如果這是您之後的操作,那麼您需要按照您的操作做或多或少的事情,但要將該信息與您在文件系統中找到的內容相關聯正確。映射這些塊將(最好)很難。