Başka bir kullanıcı sabit diske yeni bir veri yazmak istiyor ancak bunun için yeterli boş alanı yok. Ayrıca hiçbir şeyi silmek istemiyorum çünkü "her şey çok önemli ve gerekli." Peki bununla ne yapmalıyız?
Kimsede bu sorun yok. Sabit disklerimizde terabaytlarca bilgi var ve bu miktarın azalma eğilimi yok. Ama ne kadar benzersiz? Sonuçta, tüm dosyalar yalnızca belirli uzunluktaki bit kümeleridir ve büyük olasılıkla yenisi, halihazırda depolanmış olandan pek farklı değildir.
Halihazırda sabit diskte depolanan bilgi parçalarını aramanın başarısızlık olmasa da en azından etkili bir görev olmadığı açıktır. Öte yandan, eğer fark küçükse, o zaman biraz ayarlayabilirsiniz...
TL;DR - JPEG dosyalarını kullanarak verileri optimize etmenin garip bir yönteminden bahsetmeye yönelik ikinci girişim, şimdi daha anlaşılır bir biçimde.
Bitler ve farklar hakkında
Tamamen rastgele iki veri parçası alırsanız, içerdikleri bitlerin ortalama yarısı çakışır. Aslında, her bir çift için olası düzenlerin ('00, 01, 10, 11') tam yarısı aynı değerlere sahiptir, burada her şey basittir.
Ama tabii ki, eğer sadece iki dosya alıp birini ikinciye sığdırırsak, o zaman bunlardan birini kaybederiz. Değişiklikleri kaydedersek, yeniden keşfedeceğiz
Ne ile ne arasındaki fark ortadan kaldırılabilir? Yani, kullanıcı tarafından yazılan yeni bir dosya, tek başına hiçbir şey yapamayacağımız bir dizi bitten ibarettir. O zaman sabit diskte, farkı kaydetmenize gerek kalmadan değiştirilebilecek öyle parçalar bulmanız gerekir ki, ciddi sonuçlara yol açmadan bunların kaybından kurtulabilirsiniz. Ve yalnızca FS'deki dosyayı değil, içindeki daha az hassas bazı bilgileri de değiştirmek mantıklıdır. Ama hangisi ve nasıl?
Montaj yöntemleri
Kayıplı sıkıştırılmış dosyalar kurtarmaya gelir. Tüm bu jpeg'ler, mp3'ler ve diğerleri, kayıplı sıkıştırmaya rağmen, güvenli bir şekilde değiştirilebilecek bir sürü bit içerir. Kodlamanın çeşitli aşamalarında bileşenlerini fark edilmeden değiştiren gelişmiş tekniklerin kullanılması mümkündür. Beklemek. Gelişmiş teknikler... algılanamaz değişiklik... bir parçadan diğerine... neredeyse aynı
Gerçekten de, bir bilgiyi diğerine gömmek, onun yöntemlerini başka hiçbir şeye benzemeyen bir şekilde anımsatıyor. Ayrıca insan duyularında yapılan değişikliklerin algılanamazlığından da etkilendim. Yolların ayrıldığı yer gizliliktir: Bizim görevimiz kullanıcının sabit diskine ek bilgiler girmesidir; bu ona yalnızca zarar verir. Yine unutacak.
Bu nedenle bunları kullanabilmemize rağmen bazı değişiklikler yapmamız gerekiyor. Sonra bunları mevcut yöntemlerden birini ve ortak bir dosya formatını kullanarak anlatacağım ve göstereceğim.
Çakallar hakkında
Gerçekten sıkarsanız dünyadaki en sıkıştırılabilir şeydir. Elbette JPEG dosyalarından bahsediyoruz. Verileri içine gömmek için tonlarca araç ve mevcut yöntem bulunmasının yanı sıra, bu gezegendeki en popüler grafik formatıdır.
Ancak köpek yetiştiriciliği yapmamak için bu formattaki dosyalarda faaliyet alanınızı sınırlamanız gerekir. Hiç kimse aşırı sıkıştırma nedeniyle ortaya çıkan tek renkli karelerden hoşlanmaz, bu nedenle kendinizi zaten sıkıştırılmış bir dosyayla çalışmakla sınırlamanız gerekir; yeniden kodlamadan kaçınmak. Daha spesifik olarak, veri kaybından sorumlu işlemlerden sonra kalan tamsayı katsayılarıyla - kodlama şemasında mükemmel bir şekilde görüntülenen DCT ve niceleme (Bauman Ulusal Kütüphanesi'nin wiki'si sayesinde):
Jpeg dosyalarını optimize etmenin birçok olası yöntemi vardır. Kayıpsız optimizasyon var (jpegtran), optimizasyon var "
F5
Tüm bir algoritma ailesi, aşina olabileceğiniz bu koşullara uyar
Değişikliklerin kendisi, belirli koşullar altında (yani her zaman değil) katsayıların mutlak değerini birer birer azaltmaktan ibarettir; bu, sabit sürücünüzdeki veri depolamayı optimize etmek için F5'i kullanmanıza olanak tanır. Mesele şu ki, böyle bir değişiklikten sonraki katsayı, JPEG'deki değerlerin istatistiksel dağılımı nedeniyle Huffman kodlamasından sonra büyük olasılıkla daha az bit kaplayacak ve yeni sıfırlar, bunları RLE kullanarak kodlarken bir kazanç sağlayacaktır.
Gerekli değişiklikler, kaynaklardan ve yürütme süresinden tasarruf sağlayan gizlilikten sorumlu kısmın (şifre yeniden düzenlemesi) ortadan kaldırılmasına ve aynı anda bir dosya yerine birçok dosyayla çalışmaya yönelik bir mekanizmanın eklenmesine kadar uzanır. Okuyucunun değişim süreciyle daha ayrıntılı olarak ilgilenmesi pek olası değildir, bu nedenle uygulamanın açıklamasına geçelim.
Yüksek teknolojiler
Bu yaklaşımın nasıl çalıştığını göstermek için, yöntemi saf C'de uyguladım ve hem yürütme hızı hem de bellek açısından bir dizi optimizasyon gerçekleştirdim (bu resimlerin sıkıştırma olmadan ne kadar ağır olduğunu, hatta DCT'den önce bile hayal edemezsiniz). Kitaplıkların bir kombinasyonu kullanılarak elde edilen çapraz platform
Uygulama, bir konsol yardımcı programı ve kütüphane biçiminde mevcuttur. İlgilenenler ikincisini kullanma hakkında daha fazla bilgiyi yazının sonuna ekleyeceğim bağlantı olan Github'daki depodaki benioku dosyasında bulabilirler.
Nasıl kullanılır?
Dikkatlice. Paketleme için kullanılan görseller, verilen kök dizinde düzenli bir ifade kullanılarak arama yapılarak seçilir. Tamamlandıktan sonra dosyalar kendi sınırları dahilinde istenildiği gibi taşınabilir, yeniden adlandırılabilir ve kopyalanabilir, dosya ve işletim sistemi değiştirilebilir vb. Ancak son derece dikkatli olmalı ve anlık içeriği hiçbir şekilde değiştirmemelisiniz. Bir bitin bile değerini kaybetmek, bilginin kurtarılmasını imkansız hale getirebilir.
Tamamlandığında yardımcı program, kullanılan görüntülerle ilgili veriler de dahil olmak üzere paketin açılması için gerekli tüm bilgileri içeren özel bir arşiv dosyası bırakır. Tek başına yaklaşık birkaç kilobayt ağırlığındadır ve kaplanan disk alanı üzerinde önemli bir etkisi yoktur.
'-a' işaretini kullanarak olası kapasiteyi analiz edebilirsiniz: './f5ar -a [arama klasörü] [Perl uyumlu normal ifade]'. Paketleme './f5ar -p [arama klasörü] [Perl uyumlu normal ifade] [paketlenmiş dosya] [arşiv adı]' komutuyla yapılır ve paketten çıkarma './f5ar -u [arşiv dosyası] [kurtarılan dosya adı] ile yapılır ]' .
İş gösterimi
Yöntemin etkinliğini göstermek için, hizmete ait 225 adet tamamen ücretsiz köpek fotoğrafından oluşan bir koleksiyon yükledim
Sıra oldukça basittir:
$ du -sh knuth.pdf dogs/
44M knuth.pdf
633M dogs/
$ ./f5ar -p dogs/ .*jpg knuth.pdf dogs.f5ar
Reading compressing file... ok
Initializing the archive... ok
Analysing library capacity... done in 17.0s
Detected somewhat guaranteed capacity of 48439359 bytes
Detected possible capacity of upto 102618787 bytes
Compressing... done in 39.4s
Saving the archive... ok
$ ./f5ar -u dogs/dogs.f5ar knuth_unpacked.pdf
Initializing the archive... ok
Reading the archive file... ok
Filling the archive with files... done in 1.4s
Decompressing... done in 21.0s
Writing extracted data... ok
$ sha1sum knuth.pdf knuth_unpacked.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth_unpacked.pdf
$ du -sh dogs/
551M dogs/
Hayranlar için ekran görüntüleri
Paketten çıkarılan dosya okunabilir ve okunmalıdır:
Gördüğünüz gibi sabit diskteki orijinal 633 + 36 == 669 megabayt veriden daha hoş 551'e geldik. Bu kadar radikal bir fark, katsayıların değerlerindeki azalmayla açıklanıyor, bu da onları etkiliyor ardından kayıpsız sıkıştırma: tek tek azaltmak, son dosyadan birkaç baytı kolayca kesebilir. Ancak bu, son derece küçük de olsa, katlanmak zorunda kalacağınız bir veri kaybıdır.
Neyse ki gözle kesinlikle görünmezler. Spoiler altında (habrastorage büyük dosyaları işleyemediğinden), okuyucu, değiştirilen bileşenin değerlerinin orijinalden çıkarılmasıyla elde edilen farkı hem gözle hem de yoğunlukla değerlendirebilir:
Bunun yerine bir sonuca
Tüm bu zorluklar göz önüne alındığında, bir sabit disk satın almak veya her şeyi buluta yüklemek, soruna çok daha basit bir çözüm gibi görünebilir. Ancak şu anda harika bir zamanda yaşıyor olsak bile, yarın çevrimiçi olup tüm ekstra verilerinizi bir yere yüklemenin hala mümkün olacağının garantisi yok. Veya mağazaya gidin ve kendinize bin terabaytlık bir sabit disk daha satın alın. Ancak her zaman mevcut evleri kullanabilirsiniz.
->
Kaynak: habr.com