# Łączenie plików rozrzuconych na dysku
###### Tagi: `UJ` `prezentacja`
Jakub Mędrek
---
# Fragmentacja
||1|2|3|4|5|6|
|-|-|-|-|-|-|-|
|1:|A|A|B|C|D| |
|2:|A|A| |C|D| |
|3:|A|A|E.001|C|D|E.002|
**Dyski SSD** -- w przeciwieństwie do dysków HDD nie używają algorytmów defragmentacji, jeden plik może być w wielu kawałkach.
---
# Format danych
Zrzut dysku, bez znajomości systemu plików. Narzędzia do wykonywania kopii -- `dd`

---
# Typy plików
Tylko duże pliki ulegają fragmentacji:
- **obrazki**
- video
- dokumenty (docx, pdf)
---
# Schemat działania
```sequence
main->filtrowanie: Pozostaw tylko bloki\ndanego typu (obrazy, video)
Note over filtrowanie: Podziel bloki na nagłówki\ni kolejne
filtrowanie->main:
main->łączenie: Połącz bloki ze sobą
Note over łączenie: Zbadaj podobieństwo kolejnych bloków
łączenie->main:
```
1. Odczyt kopii dysku fragment po fragmencie
2. Oznaczenie fragmentów pochodzących od interesujących nas plików
3. Zebranie fragmentów w grupy (z tego samego pliku)
4. Połączenie fragmentów
5. Eksport odzyskanych plików
---
# Odczyt kopii dysku
Archiwum wykonane za pomocą `dd` -- surowe dane
---
### Oznaczenie fragmentów
- Duża entropia danych
- W plikach jpg plik jest podzielony "markerami": 0xFF00 - 0xFFFF
- drugi bit - możliwe tylko: 00, [C4 : FE], FF
- początek i koniec obrazu oznaczone są dodatkowymi markerami
- Możliwe użycie zewnętrznej biblioteki do odczytania danych o dysku, aktualnie parametry są wpisywane ręcznie
---
### Grupowanie i łączenie fragmentów
A := Koniec nagłówka obrazu (ostatnia linia, wysokość określona w jpg)
B := Początek doklejonego obrazu
p := próg podobieństwa (0-256)
Histogram opisany trzema liczbami (RGB)
```python=
if abs(A[R] - B[R]) < p:
weight += 1
```
biblioteka w C
---
# Eksport plików
Założenie, że kolejny obrazek zaczyna się po poprzednim. Można odrzucić nagłówki, wybieramy ten z największym podobieństwem.
Algorytm zachłanny

---
{"metaMigratedAt":"2023-06-14T22:08:46.126Z","metaMigratedFrom":"YAML","title":"Łączenie plików rozrzuconych na dysku","breaks":true,"slideOptions":"{\"transition\":\"slide\"}","contributors":"[{\"id\":\"0679b14d-418e-479f-aed4-7764c9adc7ad\",\"add\":2343,\"del\":277}]"}