Neden 1 KiB blok büyüklüğündeki tam 100 MiB bölümüm karşılık gelen bloklara / boşluğa sahip değil?


33

Kapları olan çok yoğun bir sanallaştırılmış ortama sahibim, bu yüzden her bir kabı gerçekten küçük yapmaya çalışıyorum. "Gerçekten küçük" , paket yöneticisi uyumluluğunu bozmadan, Ubuntu 14.04 (Trusty Tahr) bazında 87 MB anlamına gelir .

Bu yüzden LVM'yi konteynerlerim için yedek depolama olarak kullanıyorum ve son zamanlarda çok garip numaralar buldum. İşte buradalar.

Bir 100 MiB (evet, 2'nin gücü) mantıksal hacmi oluşturalım.

sudo lvcreate -L100M -n test1 /dev/purgatory

Boyutu kontrol etmek istiyorum, bu yüzden sayı sudo lvs --units k

test1             purgatory  -wi-a----  102400.00k

Tatlı, bu gerçekten 100 MiB.

Şimdi bir ext4 dosya sistemi yapalım . Ve elbette, -m 0uzay israfını önleyen parametreyi hatırlıyoruz .

sudo mkfs.ext4 -m 0 /dev/purgatory/test1

mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
0 blocks (0.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Tatlı ve temiz. Blok büyüklüğüne dikkat edin - mantıksal hacmimiz küçüktür, bu nedenle mkfs.ext4 normal 4 KiB değil, 1 KiB boyutunda bir blok yapmaya karar verdi.

Şimdi onu monte edeceğiz.

sudo mount /dev/purgatory/test1 /mnt/test1

Ve dfparametre olmadan arayalım (1 KiB-blok görmek istiyoruz)

/dev/mapper/purgatory-test1     95054    1550     91456   2% /mnt/test1

Bekle, oh shi ~

Toplam 95054 blokumuz var. Ancak cihazın kendisi 102400 blok 1 KiB'ye sahiptir. Depomuzun sadece% 92,8'ine sahibiz. Bloklarım nerede adamım?

Buna gerçek bir blok aygıtta bakalım. A'nın 16 GiB sanal diski var, 1K'nın 16777216 bloğu, ancak yalnızca 15396784 bloğu df çıktısında. % 91.7, bu nedir?

Şimdi soruşturmayı takip ediyor (spoiler: sonuç yok)

  1. Dosya sistemi cihazın başında başlayamaz. Bu garip ama mümkün. Neyse ki, ext4 sihirli baytlara sahip, varlığını kontrol edelim.

    sudo hexdump -C / dev / araf / test1 | grep "53 ef"

Bu, süper bloğu gösterir:

00000430  a9 10 e7 54 01 00 ff ff  53 ef 01 00 01 00 00 00  |...T....S.......|

Hex 430 = 1072 Aralık, yani ilk kilobayttan sonra bir yerde. Makul görünüyor, ext4 VBR gibi tuhaflıklar için ilk 1024 baytı atlıyor.

  1. Bu günlük!

Hayır öyle değil. Eğer df çıkışı varsa Journal, kullanılabilir.

  1. Oh, biz dump2fs var ve orada boyutları kontrol edebiliriz!

... bir sürü insan ...

sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"

Ahh.

Free blocks:              93504
  Free blocks: 3510-8192
  Free blocks: 8451-16384
  Free blocks: 16385-24576
  Free blocks: 24835-32768
  Free blocks: 32769-40960
  Free blocks: 41219-49152
  Free blocks: 53249-57344
  Free blocks: 57603-65536
  Free blocks: 65537-73728
  Free blocks: 73987-81920
  Free blocks: 81921-90112
  Free blocks: 90113-98304
  Free blocks: 98305-102399

Ve başka bir numaramız var. 93504 ücretsiz bloklar.

Soru şudur: neler oluyor?

  • Cihaz engelle: 102400k (lvs diyor)
  • Dosya sistemi boyutu: 95054k (df diyor)
  • Ücretsiz bloklar: 93504k (dumpe2fs diyor ki)
  • Mevcut boyut: 91456k (df diyor)

Bu yüzden hala ext2küçük bölümler için kullanıyorum .
frostschutz

@frostschutz ext2emin görünüyor, burada makul
maniaque

Yanıtlar:


32

Bunu dene: mkfs.ext4 -N 104 -m0 -O ^has_journal,^resize_inode /dev/purgatory/test1

Bunun "neler olduğunu" anlamanı sağladığını düşünüyorum.

-N 104 (dosya sisteminin sahip olması gereken iNode sayısını ayarlayın)

  • Her iNode "maliyetli" kullanılabilir alan (128 Bayt)

-m 0(ayrılmış blok yok)
-O ^has_journal,^resize_inode(özellikleri devre dışı bırak has_journalveresize_inode

  • resize_inode"maliyet" boş alan (1250’de gördüğünüz 1550 1K-Blok /% 2’nin dfçoğu - “kayıp + bulundu” klasörü için kullanılır)
  • has_journal"maliyet" kullanılabilir alan (durumunuzda 4096 1K-Bloklar)

Biz almak 102348dışarı 102400kullanışsız başka 52 blok (biz sildiyseniz klasör "kayıp + bulunan"). Bu nedenle, içine dalıyoruz dumpe2fs:

Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0x5ee2, unused inodes 65533
  Primary superblock at 1, Group descriptors at 2-2
  Block bitmap at 3 (+2), Inode bitmap at 19 (+18)
  Inode table at 35-35 (+34)
  8150 free blocks, 0 free inodes, 1 directories, 65533 unused inodes
  Free blocks: 17-18, 32-34, 48-8192
  Free inodes: 
Group 1: (Blocks 8193-16384) [BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x56cf, unused inodes 5
  Backup superblock at 8193, Group descriptors at 8194-8194
  Block bitmap at 4 (+4294959107), Inode bitmap at 20 (+4294959123)
  Inode table at 36-36 (+4294959139)
  8190 free blocks, 6 free inodes, 0 directories, 5 unused inodes
  Free blocks: 8193-16384
  Free inodes: 11-16
Group 2: (Blocks 16385-24576) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x51eb, unused inodes 8
  Block bitmap at 5 (+4294950916), Inode bitmap at 21 (+4294950932)
  Inode table at 37-37 (+4294950948)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 16385-24576
  Free inodes: 17-24
Group 3: (Blocks 24577-32768) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x3de1, unused inodes 8
  Backup superblock at 24577, Group descriptors at 24578-24578
  Block bitmap at 6 (+4294942725), Inode bitmap at 22 (+4294942741)
  Inode table at 38-38 (+4294942757)
  8190 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 24577-32768
  Free inodes: 25-32
Group 4: (Blocks 32769-40960) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x79b9, unused inodes 8
  Block bitmap at 7 (+4294934534), Inode bitmap at 23 (+4294934550)
  Inode table at 39-39 (+4294934566)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 32769-40960
  Free inodes: 33-40
Group 5: (Blocks 40961-49152) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x0059, unused inodes 8
  Backup superblock at 40961, Group descriptors at 40962-40962
  Block bitmap at 8 (+4294926343), Inode bitmap at 24 (+4294926359)
  Inode table at 40-40 (+4294926375)
  8190 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 40961-49152
  Free inodes: 41-48
Group 6: (Blocks 49153-57344) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x3000, unused inodes 8
  Block bitmap at 9 (+4294918152), Inode bitmap at 25 (+4294918168)
  Inode table at 41-41 (+4294918184)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 49153-57344
  Free inodes: 49-56
Group 7: (Blocks 57345-65536) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x5c0a, unused inodes 8
  Backup superblock at 57345, Group descriptors at 57346-57346
  Block bitmap at 10 (+4294909961), Inode bitmap at 26 (+4294909977)
  Inode table at 42-42 (+4294909993)
  8190 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 57345-65536
  Free inodes: 57-64
Group 8: (Blocks 65537-73728) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0xf050, unused inodes 8
  Block bitmap at 11 (+4294901770), Inode bitmap at 27 (+4294901786)
  Inode table at 43-43 (+4294901802)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 65537-73728
  Free inodes: 65-72
Group 9: (Blocks 73729-81920) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x50fd, unused inodes 8
  Backup superblock at 73729, Group descriptors at 73730-73730
  Block bitmap at 12 (+4294893579), Inode bitmap at 28 (+4294893595)
  Inode table at 44-44 (+4294893611)
  8190 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 73729-81920
  Free inodes: 73-80
Group 10: (Blocks 81921-90112) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x60a4, unused inodes 8
  Block bitmap at 13 (+4294885388), Inode bitmap at 29 (+4294885404)
  Inode table at 45-45 (+4294885420)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 81921-90112
  Free inodes: 81-88
Group 11: (Blocks 90113-98304) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x28de, unused inodes 8
  Block bitmap at 14 (+4294877197), Inode bitmap at 30 (+4294877213)
  Inode table at 46-46 (+4294877229)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 90113-98304
  Free inodes: 89-96
Group 12: (Blocks 98305-102399) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0x9223, unused inodes 8
  Block bitmap at 15 (+4294869006), Inode bitmap at 31 (+4294869022)
  Inode table at 47-47 (+4294869038)
  4095 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 98305-102399
  Free inodes: 97-104

ve kullanılan blokları sayın (Backup superblock, Grup tanımlayıcıları, Block bitmap, Inode bitmap ve Inode table için) ya da biz grepve count:

LANG=C dumpe2fs /dev/mapper/vg_vms-test1 | grep ' at ' | grep -v ',' | wc -l

bize tek bir bloğu olan satır sayısını verir (örneğimizde) ve

LANG=C dumpe2fs /dev/mapper/vg_vms-test1 | grep ' at ' | grep ',' | wc -l

bize iki bloğu olan satır sayısını verir (örneğimizde).

Böylece (örneğimizde) 13her biri bir blok 19satır ve her biri iki satır satır var.

13+19*2

bize 51ext4'ün kullandığı blokları veriyor . Sonunda sadece bir blok kaldı. 1024Önyükleme sektörü gibi şeyler için başlangıçta atlanan Bayt olan 0 bloğu .


Eğer dergi sadece 4096k alıyorsa, bu numaraya sahip değilim (95054 - 4096)! = 91456?
manyak

Buradaki tüm sayılar k cinsindendir, bu nedenle toplam 95054k - 4096k dergi! = 91456k kullanılabilir.
manyak

1
dfgünlüğü ile fs üzerinde: 95054k - dfjorunal 99150k olmadan fs üzerinde - ve "kullanılabilir" ve "boş" alanı karıştırmayın.
xx4h

Bazı dosya sistemleri, örneğin xfs, dinamik olarak gerektiğinde inode'lar için yer ayırır. Merak ediyorsanız, xfs ve btrfs'yi denemek isteyebilirsiniz. mkfs.xfs -l size=512 -d agcount=1mutlak minimum log (aka dergi) büyüklüğünde bir dosya sistemi yapacak, ancak yazma performansı düşebilir. XFS kodunun günlük olmadan çalışmayı desteklediğini sanmıyorum. Harici bir kayıt cihazının bozulduğu durumları desteklemek için muhtemelen salt okunurdur. (ayrıca, agcount=1muhtemelen yazma performansı için başka bir korkunç fikirdir, özellikle de paraleldir. Tahsisat grubu başlıkları da muhtemelen küçüktür.)
Peter Cordes

Merakladım ve XFS'i denedim. Linux XFS için minimum günlük boyutunun minimum 512 bloktan aşağıya inmesine izin verecek bir seçenek kombinasyonu varsa, IDK'nin ne olduğunu. mkfs.xfs -d agcount=1100MiB'lik bir bölüm üzerinde 95980kiB'lik bir FS yapıldı, kullanılan 5196k, 90784k mevcut. Varsayılan agcount 4 ve varsayılan günlük büyüklüğü 1605 bloktur (ayrıca minimum). Bu yüzden XFS, küçük FS'ler için belirtmenize izin verdiği kadar küçük bir günlük kullanır.
Peter Cordes

19

Kısa cevap:

Blok cihazındaki tüm alan verileriniz için uygun bir alan haline gelmiyor: Ham alanın bir kısmı, dosya sistemi iç kısımları için, sahne arkasında defter tutma işlemi için gerekli.

Bu defter tutma, süper blok, blok grup tanımlayıcılarını, blok ve inode bitmaplerini ve inode tablosunu içerir. Ek olarak, yedekleme / kurtarma amacıyla süper bloğun kopyaları birçok yerde yaratılır. EXT4 dosya sistemi hakkında uzun bir okuma ext4.wiki.kernel.org adresinde bulunabilir .

EXT4, biraz yer kaplayan günlüklü bir dosya sistemi olduğundan.

Ek olarak, dosya sisteminin gelecekteki genişlemeleri için biraz alan ayrılmıştır.

Uzun cevap:

Senaryoyu test sistemlerimden birinde yeniden yarattım:

lvcreate -L 100M -n test MyVG
mkfs.ext4 -b 1024 /dev/MyVG/test 

Sonra bile dosya sistemi monte etmeden önce bir dumpe2fsgösterir:

Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              25688
Block count:              102400
Reserved block count:     5120
Free blocks:              93504
Free inodes:              25677
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         1976
Inode blocks per group:   247
Flex block group size:    16
Filesystem created:       Fri Feb 20 13:20:54 2015
Last mount time:          n/a
Last write time:          Fri Feb 20 13:20:55 2015
...
Journal size:             4096k  
...

ve montajdan sonra:

df /tmp/test/
Filesystem              1K-blocks  Used Available Use% Mounted on
/dev/mapper/MyVG-test       99150  5646     88384   7% /tmp/test

Peki dfbize ne gösteriyor? Ham depolama aygıtı kapasitesinin 102400 blokundan 99150 1K blok dosya sistemine görünür, yani 3250 1-Kilobayt ham depolama alanı blokları gerçek veri depolama için kullanılamaz hale gelir.

Bu bloklar nereye gitti? dumpe2fsÇıktıda aşağı kaydırma , tam olarak aşağıdakileri gösterir:

Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0x0d67, unused inodes 1965
  Primary superblock at 1, Group descriptors at 2-2
  Reserved GDT blocks at 3-258
  Block bitmap at 259 (+258), Inode bitmap at 275 (+274)
  Inode table at 291-537 (+290)
  4683 free blocks, 1965 free inodes, 2 directories, 1965 unused inodes
  Free blocks: 3510-8192
  Free inodes: 12-1976

1 block (blok no. 0) İlk 1024 bayt, x86 önyükleme kesimlerinin ve diğer tuhaflıkların kurulmasına izin vermek için atlanır.
1 block Birincil süper blok tarafından işgal edilir.
1 block Grup tanımlayıcılarını içerir.
256 blocksolan Grup Tarif Tablosunun için ayrılmış dosya sisteminin geleceği yeniden boyutlandırılması izin vermek. 16 blocks blok bitmapine atanır.
16 blocksinode bitmap için atanır.
246 blocksinode tablosu için atanır.

Bu zaten 3250 kayıp bloğun 537'sini oluşturuyor. Bir ext4 dosya sistemi bir dizi blok gruba ayrılır ve aşağı kaydırmak, diğer blok gruplarındaki dosya sistemi içindekilere benzer bir ham depolama kapasitesi tahsisini gösterir:

Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0x0618, unused inodes 1976
  Backup superblock at 8193, Group descriptors at 8194-8194
  Reserved GDT blocks at 8195-8450
  Block bitmap at 260 (+4294959363), Inode bitmap at 276 (+4294959379)
  Inode table at 538-784 (+4294959641)
  7934 free blocks, 1976 free inodes, 0 directories, 1976 unused inodes
  Free blocks: 8451-16384
  Free inodes: 1977-3952
Group 2: (Blocks 16385-24576) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0xcfd3, unused inodes 1976
  Block bitmap at 261 (+4294951172), Inode bitmap at 277 (+4294951188)
  Inode table at 785-1031 (+4294951696)
  8192 free blocks, 1976 free inodes, 0 directories, 1976 unused inodes
  Free blocks: 16385-24576
  Free inodes: 3953-5928 
Group ....

Şimdi dfçıktıya dönelim :

df /tmp/test/
Filesystem              1K-blocks  Used Available Use% Mounted on
/dev/mapper/MyVG-test       99150  5646     88384   7% /tmp/test

Bu yeni dosya sisteminde, kapasitenin% 7'sinin kullanımdaki gibi işaretlenmiş olmasının nedeni:

99150 (dosya sisteminin boyutu) MINUS 5120 (ayrılmış blok sayısı) MINUS 5646 (4096 tanesi Journal'dan olan kullanılmış bloklar (yine dumpe2fs çıktısının bir parçası))
= 88384

Dumpe2fs içindeki serbest blok sayısı, asıl kullanım eksi dosya sisteminin mevcut büyüklüğüdür (ve ayrılmış blokları hesaba katmaz), yani 99150 - 5646 = 93504.


0

Bu sorunun cevabı değil, ama merak ettim başkalarının da hayal edebileceğini düşünüyorum. Zaten önyüklenen bir liveCD yaptığım ve bir şeye zarar veren yazım hataları konusunda endişe duymadan karıştırabileceğim bir sabit disk sürücüsü olduğu için devam ettim ve test ettim.

Ubuntu 14.10'un 100MiB bölümlerinde bir mkfs gönderdiği tüm FS'lerle bölümler oluşturdum. (yalnızca 64MiB'yi destekleyen minix ve hiç duymadığım bir SCO olayı olan bfs).)

Önce baktı df -ksonra, (varsayılan mkfs ayarlarla) kullanılabilir alan dded /dev/zerotüm yol olduklarından emin doldurulabilir telafi etmek her FS bir dosyaya. (yani iddiada available spacegerçekten bulunulduğunu kontrol ediniz .)
for i in /media/ubuntu/small-*;do sudo dd if=/dev/zero of="$i/fill" bs=16k;done

* FS: empty `df -k` : non-zero `df -k` when full (false bottom)
* jfs:  101020k
* fat32:100808k  : 4
* ntfs:  99896k
* btrfs: 98276k  : 4428
* ext2:  92480k
* xfs:   90652k  : 20
* ext4:  86336k
* ext3:  88367k
* reiserfs(v3): 69552k

Btrfs neden bu kadar kullanılamaz alanı var? Belki meta veriler için? peki hayır:

$ for i in /media/ubuntu/small-*;do sudo touch "$i/touched";done
touch: cannot touch ‘/media/ubuntu/small-btrfs/touched’: No space left on device
touch: cannot touch ‘/media/ubuntu/small-reiser/touched’: No space left on device

Her iki ağaç tabanlı dosya sistemi boş bir dosyayı hiçbir yere koyamaz, ancak diğerleri paketleyebilir.

Veya ne kadar büyük bir dosya oluşturabileceğinize bakın:

$ ls -SdlG --block-size=1k /media/ubuntu/small-*/*
-rw-r--r-- 1 root   101020 Feb 21 11:55 /media/ubuntu/small-jfs/fill
-rw-r--r-- 1 ubuntu 100804 Feb 21 11:55 /media/ubuntu/small-fat/fill
-rw------- 1 ubuntu  99848 Feb 21 11:55 /media/ubuntu/small-ntfs/fill
-rw-r--r-- 1 root    97216 Feb 21 11:55 /media/ubuntu/small-ext2/fill
-rw-r--r-- 1 root    93705 Feb 21 11:27 /media/ubuntu/small-btrfs/foo
-rw-r--r-- 1 root    93120 Feb 21 11:55 /media/ubuntu/small-ext3/fill
-rw-r--r-- 1 root    91440 Feb 21 11:55 /media/ubuntu/small-ext/fill
-rw-r--r-- 1 root    90632 Feb 21 11:55 /media/ubuntu/small-xfs/fill
-rw-r--r-- 1 root    69480 Feb 21 11:55 /media/ubuntu/small-reiser/fill
drwx------ 2 root       12 Feb 21 11:33 /media/ubuntu/small-ext2/lost+found
drwx------ 2 root       12 Feb 21 11:43 /media/ubuntu/small-ext3/lost+found
drwx------ 2 root       12 Feb 21 11:29 /media/ubuntu/small-ext/lost+found

(Ext4 bölümümü "small-ext" olarak adlandırdım, çünkü delirmeyi ve her dosya sistemini kurmayı planlamıyordum. Bu yüzden ext = ext4 burada.

Ve df -ktekrar çıkardıktan sonra çıktı:

/dev/sdd6          95980    5328     90652   6% /media/ubuntu/small-xfs
/dev/sdd7          95054    1550     86336   2% /media/ubuntu/small-ext
/dev/sdd5         102400   93880    101020  96% /media/ubuntu/small-btrfs
/dev/sdd8         101168  101168         0 100% /media/ubuntu/small-jfs
/dev/sdd9          99150    1550     92480   2% /media/ubuntu/small-ext2
/dev/sdd10        102392   32840     69552  33% /media/ubuntu/small-reiser
/dev/sdd11        100808       1    100808   1% /media/ubuntu/small-fat
/dev/sdd12        102396    2548     99848   3% /media/ubuntu/small-ntfs
/dev/sdd13         95054    1567     88367   2% /media/ubuntu/small-ext3

(jfs, "dokundu" da kaldırıldıktan sonra% 1 değerine geri döndü. Ya bir gecikme yaşandı ya da güncellenebilecek boyutu almak için başka bir yazı aldı.)

Her neyse, bunun merakım için mesele olduğunu düşünüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.