ファイルの重複を簡単に解消する!Hyperspaceの魅力とは
引用元:https://news.ycombinator.com/item?id=43173462
前に’dedup’ってコマンドラインユーティリティ作ったんだけど、同じことしてた。ドライランモードもあって、賢く一番良いクローンソースを選ぶんだ。ハードリンクや他のクローンも理解して、メタデータを保って、HFS圧縮ファイルにも対応。自分のデータは壊してないけど、ファイルシステムツールはリスクあるから注意してね。
自分のディスクイメージやバイナリを扱うワークスペースで試してみた。デフォルトでは全ファイルをスキャンせず、許可リストにあるファイルだけをスキャン。許可リストの構成から、Hyperspaceはファイルの内容を理解しないといけないみたいで、ユーザーにはわかりにくい。サイズ制限を外すと、スキャン数や重複計算が変わるし、Hyperspaceは67,309ファイルをスキャン。スキャン時間は50秒で、dedupは14秒で終わる。
このアプリにこんなに時間かける人がいるのが少し驚き。クローズドソースで、値段も不明、期間限定かサブスクリプションで、詳細も不明なのに。
Johnはポッドキャストで、アプリをオープンソースにしたり無料にしてサポートリクエストの山に対応したくないって何度も言ってる。彼のアプリは彼自身のニーズを満たすもので、利益のためじゃなくて、ユーザーのフィードバックを管理しやすくするために販売してるんだよ。
ソフトウェアのライセンスや配布方法について批判しないけど、最近サポートの負担を理由にクローズドソースや販売モデルにするケースが多くて、オープンソースとオープン開発を混同してないか疑問に思ってる。オープンソースプロジェクトは誰でもバグ報告やプルリクエストを受け付ける必要はないし。
> SQLiteの開発者は、McAfeeのせいで電話が殺到したって有名だよね。バグ報告を受け付けないのは難しいよ。
> アプリをオープンソースにしたらサポートリクエストに対応する必要があるの?全然そうじゃないでしょ。
> ほとんどの人気オープンソースソフトのメンテナは、サポートリクエストを完全に無視するなんてできない。彼はユーザーをサポートしつつ収入を得たくてこうしてるみたいだね。
> GitHubが混乱を引き起こして、オープンソースは今やGitHubの一部とみなされてる。解決策は、Windowsを使わなければWindows関連の問題を避けられるのと同じ。GitHubを使わなければいいんだし。
オープンソースには多くの利点があるけど、スパムやポリティクス、ドラマもあるし、そういったネガティブな面は経験したことがない人には見えないよ。メインテナーバーンアウトはリアルだから、良いソフトウェアを作り続けたいならJohnの選択を尊重するよ。
”人気のオープンソースソフトウェアを管理したことがある人なら、サポートについての問い合わせを無視するか、削除しなきゃいけないなんて、あり得ないよね”
”それは BS 理由だと思う。問題を解決したくないなら、開いてる課題を全部無視すればいいだけじゃん。コミュニティができて問題を直すなら、そのコミュニティが対応するよ”
”ポッドキャストを聴いた感じだと、人気になったら彼が作業を続ける価値が欲しいみたいなんだよね。人気が出ると多くの問題も発生するから、収入が必要ってことだと思う”
”そう思うなら、どこかおかしいと思う。ユーザーからのバグ報告は貴重だし、自分でも使うなら直したいと思うはずだ。ソフトウェアを有料化するのは、テストの目撃者を減らすだけだから、いいことはないよ”
”ソフトを買った人がバグ報告をする義務なんてないし、報告すればバグ修正につながる有益さがあるのに。それだとお互いにとってのメリットだよ”
”GitHubのユーザーベースの特性を理解するのは大事だけど、それは他のプラットフォームでも共通だから、それぞれの使い方を考えてるんだと思う”
”ユーザーが自由にフィードバックを送れるようにすると、ノイズが増えてしまう。課金している人だけからのフィードバックなら、経済的な理由から質が低くなるかもしれないけど、精神的負担は減るはずだ”
”飲食店なら選ぶだけで済むけど、問題トラッカーは開発者が責任を持って対応しないといけない。フィードバックを受けることは重要だけど、膨大な労力がかかるから、必ずしもオープンである必要はないんだ”
”問題トラッカーには、開発者が対応する必要があるから、ノイズを減らすのも重要なこと。全てのフィードバックを受けるのが理想かもしれないけど、単独開発者にはその負担が大きすぎる”
はい、そうです。全く問題が無いというわけではないですが、課題トラッカーを全く見ない以外は問題が起きないと思います。なんでそう思うんですか?
>”閉じたソースのアプリにおいてそんなことを言うのは変だ”。 >”閉じたソースのアプリにおいてそんなことを言うのは変だ”。 明示的な金額が見えないってこと?アプリストアのページの下にいけば、すべてのアプリ内課金の価格が載ってるよ。アプリストアの価格はローカライズされてるし、ブログ記事に「$10」と書いてても世界中にはドルを使わない人がいるから、混乱するよね。 アプリを見たというエントリーをAppleのDBに作りたいなら、簡単に見つけられるよ。ローカル通貨の件について言うと、私はヨーロッパ在住でスペインのIPを使ってるけど、表示される価格はUSDだよ。あと、Appleのアプリストアには’Hyperspace’って名前のアプリがいくつかあるよ。 ジョン・シラキューサが有名だからこそじゃない?無名のデベロッパーなら、ここまで注目されなかったと思う。彼がOSの詳細なレビューを書くことからは多くを学んだからこそ、注目される理由があるんだよね。 このユーティリティを作ってくれてありがとう! プルリクエストありがとう。ファイルは個別にライセンスされているけど、LICENSEファイルも追加したよ。 試してみたけど、ちゃんと動いた!この技術の可能性に気づくまで、特定のファイルタイプの重複がどれだけあるか知らなかったよ。node_modulesでは同じjsファイルが50コピー以上置き換わることもあったんだ。まだ「プレリリース」でGHスターも少ないけど、バグがあったら怖いなってちょっと心配。 家族の写真や仕事の文書に使ってるけど、特に問題は起きてないよ。バックアップできない場合はチェックサムを作って、それで比較してる。強調したい点はブロックの破損が起きること。複数コピー持ってるから、安心してデデュープしてるけど、注意が必要だね。 あんまり関係ないけど、node_modulesの重複問題がpnpmを使う理由だと思う。pnpmは一つのグローバルパッケージリポジトリを使って、必要に応じてnode_modules内にリンクを作るんだよね。 素晴らしいドキュメントだね。特に ありがとう!FreeBSDとOpenBSDのドキュメントが好きなんだ。一つのプラットフォームだけをターゲットにして、システムライブラリだけだからビルドが簡単なんだよね。 https://news.ycombinator.com/item?id=38113396のコメントで代替案があるよ。私は過去にhttps://github.com/sahib/rmlintを使ったけど、特に不満はなかったかな。 Hyperspaceが他のアプリやmacOSとファイルの置き換えのタイミングを調整できない点が気になった。このプロセスをファイルシステムが自動で行わないのはなぜだろう?APFSで自動化することのデメリットは何だろうね。 ZFSはRAMを多く使うことがあるよ。ブロックレベルでやってるから、書き込みのたびに比較するブロックを多く管理しなきゃいけない。ファイルレベルでやれば資源が楽になるかも。 構造的にはZFSについての記述が正しくないよ。複数のファイルが同じデータの部分を持つ場合、一つのコピーしか保存しないんだ。大きなファイルの一部を変更しても全体を書き換えるわけではないよ。 バイトを変更する場合にはその通りだけど、バイトを挿入するとその後のブロックがすべて変わるから再書き込みが必要になる。ほとんどのファイルシステムにも当てはまるけどね。 ファイル全体ではなく、ブロックが複製されるってことだね。GPは全体がコピーされるとは言ってないよ。 ”大きなファイルの1バイトを変更すると、ファイルシステムがファイルを再度複製しなきゃいけないから、結構なディスク活動になるんじゃない?”ってことだね。 ZFSのことを考えれば正しいけど、デデュープをファイル単位じゃなくてブロック単位で行うファイルシステムだと、変更に関わらずファイルが再度複製されちゃうよ。 ファイルは常にブロックやブロックスパンのリストとして表現されるんだ。理論的には個々のブロックをファイル間で部分的に共有できるけど、その分複雑になる。1バイトの変更でも影響を受けたブロックだけが複製されるから、ファイルサイズにかかわらず同じ時間がかかるってことだよ。 APFSは特定のAPIを使えばコピオンライトファイルシステムなんだ。ファイル全体に対してはそれを実行できるけど、1バイトでも変更したら自分の完全なコピーができちゃう。そこからこのプログラムが完璧な重複を見つけて、既存のファイルのコピーで置き換えるように動くんだ。 ファイルの1バイトを変更するだけで、その内容全体をコピーするスペースが足りないと、予期しないディスクスペース不足になるかもしれないね。 ”複製されたファイルの1バイトを変えれば、ディスク上ではその1バイトだけが変更されるよ”って思ってるのは違うよ。多分、Linuxの近代的なファイルシステムのリフリンク機能みたいに動いてるんだろうね。macOSは初心者だけど、素晴らしいと思うよ! 確かに、書き込みアプリケーションが変更されたブロックだけを書き込む場合はその通りなんだけど、VMツールはブロックを広範囲に書き込む可能性があるよ。残念ながら、ファイルが変更されるとどのブロックが共有されているかを確認するAPIはなかったはずだし、macOS 13ではそうだった。 コピオンライトがファイルレベルかブロックレベルかは分からないけど、APFSは色々なスペースに関連する注意点があるね。たとえば、パーティションをオーバーコミットできるし、30GBのファイルがあっても実際のデータは数百Kから30GBまで変わる可能性がある。面白い世界だよ! ”1バイト変えたら、自分の完全なコピーができる”って意見だけど、デルタを保存してるのかもね。 ”これってそういう仕組みじゃないよ”って言いたい。何も削除はされない。既存のファイルのゼロスペースクローンを作るだけなんだ。 ZFSのオンライン重複排除の制限についてだね。xfsやbtrfsはエクステントベースの重複排除を使ってオフラインでもできるから、メモリを使わず、ディスク上のメタデータも小さくなると思う。 差分だけを保持するファイルシステムってあるのかな?面白そうだ。 同じこと考えてた!ファイルAとその変更点を持つ複製Bがあれば、Aが消えたときにBをそのまま使えるけど、B1とB2の複製があるとややこしくなるね。結局、A自体をディスクに残さないといけないし、複製を更新するのが大変になる可能性もあるんだ。面白いアイデアだけど、実用性は疑問かも。 ZFSはファイルレベルじゃなくてブロックレベルで重複排除してるから、ファイル間の差分を追わずに済むみたい。ZFSの重複排除には問題もあったけど、新しいバージョンは面白そう! >“ZFSの重複排除について詳しくはここ” VASTストレージは似たようなことをやってるよ。ほとんどのストレージアレイが同じブロックをハッシュで識別して一度だけ保存するのに対して、VASTはコンテンツ認識ハッシュで似たブロックのハッシュも似るんだ。ユニークなハッシュごとに参照ブロックを保存し、新しいデータが入ると似たブロックを使って差分を作成するのが特徴だね。 興味深いね。通常、Rabinフィンガープリンツを使って同じデータのチャンクを特定するけど、似たブロックを見つけたり、そのサブリフレーミングを考えるのは考えたこともなかったな。 ZFSの重複排除の主な利点は、プールのサイズやディスク数、コストを大幅に削減できることだよ。例えば、同じブロックを持つファイルをサーバーが保存していれば、ほぼ追加のディスクスペースなしで数千から数百万のコピーを保存できるんだ。 >“これについて詳しくはここ” ファイルシステムじゃないけど、NTFSを模倣しようとしているSharePointがコンテンツデータベース内で同じことをやってるよ。 これがLinuxの重複排除の標準APIだよ(btrfsやXFSで使われてる)。OSにお願いして重複を排除してもらうと、範囲をロックして同じか確認してから重複排除する仕組みなんだ。ユーザースペースのプログラムがファイルを壊すことはできないよ。 >この考えは、ファイルシステムがバックグラウンドで同じような重複排除プロセスを実行しない理由を考えさせるな。ZFSは実際にそれをやってるらしいよ。 確かに、これは“高コスト”の構成だとされてて、特定の用途向けにしか向いてないんだ。メモリの要件が厳しいからね。 そうそう、そのページでは最近の重複排除技術の改善も触れられてるから参考になるかも。 本当に?ZFSのこの機能を数年見てなかったから確認してみるよ。EDIT: これって“高速”な重複排除機能のこと? Windows ServerでもNTFSやReFSボリュームに対してこれを行ってて、Hyper-VのVMでかなり効果的だったんだ。ストレージ使用量が約45%減ったよ。 うん、以前の職場ではファイルサーバーにWindowsビルドの出力を公開してて、同じ.NETやVC++ランタイムが約1000コピーあったんだ。でも、一回の保存で済んだから良かったよ。注意すべきは、Windows Serverの重複排除はバックグラウンドプロセスで、新しい重複ファイルが作成されても本当に重複してて余分なスペースを使う。だから、たまに背景プロセスが来て“回収”する感じで、Hyperspaceアプリのように。ただし、このプロセスはコストがかかるから、常時稼働してるわけじゃないし、スキャンするディレクトリを指定する必要があるんだ。実際に重複しないようにしたければ、ZFSのようなものが必要だね。 SHA-256以上のハッシュを使ってても、システムに削除判断を任せるのは心配だな。過去に重複排除に関わったこともあるけど、自分の書いたコードには自信がないからね。ファイルをハッシュで比較して、人間が照合するのはやったことがあるけど、実際には何も移動や削除は許されなかった。こういう不安を感じるのは悪いことじゃないと思う。 >このアプリが他の選択肢よりも2倍以上の値段なのが理解できる理由だね。どんな半端な開発者もSHA256でファイルのハッシュを計算して重複を共有クローンに置き換えるコードは書けるけど、それを信じるべきじゃない。著者のJohn Siracusaは長年のプロのプログラマーで、非常に綿密な性格の人なんだ。ATPポッドキャストを聞いてて、アプリは相当なテストを経てるよ。FAQページには安全性を確保するための追加措置がたくさん載ってるから、変更提案を確認できるしね。機能に対する料金ではなく、安全性への配慮に対して料金を払ってるんだ。このアプリは他のどのアプリよりも信頼できると個人的には思うよ。 >Johnを信じるべきじゃなくて、アプリが世の中で一年過ごすのを待つのが一番いいよ。その間はハードドライブの空きスペースも十分あるし、急いで信じる必要はないね。 まだ自分の関与なしに削除の決定をシステムに任せるのは心配だなぁ。>”リストを見て、自分がどれを削除するかレビューできるから、変更書き込みボタンを押すまでは慎重に考えられるよ。” 開発者に質問なんだけど、ユーザーのファイルが壊れた時の責任はどうなるの? ほとんどのEULAはデータ損失について責任を否定して、ユーザーにバックアップを勧めてると思う。EULAを最近見てないけど。 Disk Utility.appはディスクを独占的にアクセスさせながらOSを動かし続けるのか。どうやってやってるんだろう? スキャンは無料で、得られる利益を見てから支払いってモデル、いいな。自分も7GB回収できたけど、あまり魅力的じゃなかった。 ポッドキャストで話してたけど、ユーザーは一度使ったら終わりってことが多いからサブスクリプションは理にかなってない。+ いったい月にどれだけの重複ファイルを作ってると思う?しばらくすると再度無料でスキャンできるしね。 このデュプリケーションアプリの価値は、スペースの節約だけでなく、内容が整理されてないフォルダーの中に未整理のファイルが多くあること。なんとか整理したいけど、どれが重複してるかわからないってシナリオも多い。 本当に自分は昔のソフトウェアがデフォルトでこうだったのを覚えてるのかな。もう人々はサブスクリプショントラップに慣れすぎて、新しいモデルだと思ってるとか? 90年代のシェアウェアみたいなモデルが懐かしいけど、今は開発者が基本的なアプリでも高い料金を請求してくるのには驚くね。 この価格モデル、ほんといいよね。でも他のソフトでどうするかがもっとわかりやすかったらなぁ。価値を見出すまでに学習曲線があることが多いから。 この試用版は記憶してキャンセルしなきゃいけないやつとは全然違ってすごく新鮮だね。 Mac App StoreのリストにはiOSと同じようにIAPのSKUが載ってるんじゃない? そうだね。このアプリではまあまあクリアだけど、他のアプリではIAPのSKUが意味不明な説明のことが多いから、もうちょっとわかりやすくしてほしいな。 このアプリはファイルが同じかどうかを判断するアルゴリズム、何使ってるの?もっとコメントを表示(1)
確かに、おかしなこと言ってるなって思いました。でも、私はオープンソースではなく、クローズドソースアプリを作る人に共感します。
私の意図は、オープンソースでなくクローズドソースのアプリを作ることに対する同情を表現したかっただけです。多分、誤解があったんでしょうね。
重複したほぼ同じファイルがあるPostgresの開発ディレクトリにかけたら、約1.7GBも節約できたよ。プロジェクトにはライセンスが無いみたいだけど、もしよかったら、自分の選んだライセンスを付けてほしいな。感謝の気持ちとして、インストール手順を少し改善してプルリクエストを作ったから見てみて!make
がほぼ瞬時に実行されたのには驚いたよ。もっとコメントを表示(2)
もっとコメントを表示(3)
>”仮想クレジットカードを使うといいよ、忘れたらchargesがブロックされる。”でも、ライセンスの値段ってウェブサイトで見つけられた人、いる?
hashとかビットバイビット比較とか興味深いアルゴリズムがたくさんあるけど、それぞれ欠点があるよね。大量のファイルに対して、最適な方法って何なんだろう?