Como posso verificar a localização de um arquivo (por exemplo, cluster ou setor #) no armazenamento interno? -- internal-storage campo com file-system camp android Relacionado O problema

How Can I Check the Location of a File (e.g. Cluster or Sector #) in the Internal Storage?


1
vote

problema

português

Eu gostaria de saber se eu determinado arquivo se move na memória flash (armazenamento interno), entre gravações / atualizações a ele.

Há alguma maneira de obter a localização do arquivo na memória flash?
(Número do cluster, número do setor, etc)

Eu estou usando o Android v8,
e pode instalar usar um aplicativo para isso,
ou use a linha de comando, se existir um comando relevante no comando linux - solicitar que o Android tenha.

english

I would like to know If I certain file moves on the Flash memory (internal storage), between writes/updates to it.

Is there some way I can get the file's location on the Flash memory?
(Cluster Number, Sector Number, etc)

I am using Android v8,
and can either install use an App for that,
or use the Command Line, If a relevant command exists in the Linux command-prompt that Android has.

     

Lista de respostas

0
 
vote

Eu suponho dizendo cluster Você quer dizer Windows ' Unidade de alocação , comumente chamada bloco no mundo Linux. É uma unidade de armazenamento de dados que um sistema de arquivos usa. Um cluster / bloco pode consistir ou corresponder a vários setores na mídia de armazenamento subjacente (HDD ou armazenamento flash). O setor é a unidade atômica mínima de armazenamento, um sistema operacional pode ler ou escrever. O tamanho do bloco é decidido no momento da criação do sistema de arquivos I.E. Quando formamos uma partição ( high-level formatting ). Partições e sistemas de arquivos facilitam a categorização e organizar nossos dados no dispositivo de armazenamento físico.

drives de disco rígido

"setor" pode se referir a um setor físico ou . Nos primeiros dias dos HDDs, havia apenas setores físicos criados pela divisão de clusters / faixas em discos rotativos em pequenas partes. c ylinder / h ead / s etor (chs) tem sido um método popular de endereçamento antes do l ogical b bloqueio A ddressing (LBA) foi concebido. Em vez de lidar diretamente com setores físicos, o sistema operacional agora fala com firmware do controlador de disco (através de comandos SATA / SCSI) referindo um número de LBA. Firmware no retorno mantém um LBA para o mapeamento de CHS em si, que inclui ECC , G-list (tabela de defeito do disco) etc. Este mapeamento (1: 1 / sequenciado / linear) ( ref ) é criado durante low-level formatting da unidade de disco ao fabricar, que nunca muda, exceto se algum setor estiver marcado em algum setor sobressalente. . Assim, o sistema operacional / sistema de arquivos está ciente da geometria física do disco, que é propotional para a geometria de LBAs.

armazenamento flash

Na mídia flash (SSDs, EMMC, UFS, cartões SD, etc.) Não há discos rotativos e, portanto, sem cilindros. A NAND Flash é feita de células de silício, cada célula consiste de um ( s ingle- l evel- c ell), dois ( M ulti- lc ), três ( t riple- lc ) ou quatro ( q uad - lc ) bits. As células são agrupadas em páginas (por exemplo, de 4KB) e páginas em blocos de apagamento (por exemplo, de 128 kb). Lbas para p hysical b bloqueio um mapeamento de ddresses é totalmente controlado por f lash t ranslation l ayer; uma parte do firmware do controlador flash. OS não sabe nada sobre isso, pode ver no máximo os lbas, não o que está acontecendo abaixo dele. Nem mesmo o ECC de células de memória falhada, e é por isso que não percebemos o Mau saúde do EMMC, a menos que falhe, exceto lendo ABCDEFGHIJKLMNABCDEFGHIJKLMN2 (requer raiz) usando MMC-utils ou de /sys/class/mmc_host/*/*/life_time (se o driver suporta).

Como uma página da memória não pode ser apenas sobrescrita ao contrário do HDDs, um Eraseblock tem que ser apagado primeiro antes de ser programado (escrito). Um efeito colateral é que várias páginas são apagadas / reescritas e as alterações físicas de mapeamento, mesmo que um pequeno arquivo seja editado. Esta gravação de leitura desnecessária - escrita ( RMW ) é chamado w rite a mplification. Em HDDs, os arquivos não são fisicamente substituídos, a menos que encurtados ou alongados. O sistema operacional está ciente dessas alterações físicas no HDD, mas não na memória flash.

o que é setor?

Então, depois de tudo o que estamos preocupados é o setor lógico. Mídia de armazenamento informa o sistema operacional do tamanho do setor lógico, mas "o https://android.googlesource.com/kernel/common/+/refs/heads/ ndroid-3.18 / bloco / blk-settings.c # 374 "rel =" nofollow noreferro "> padrão de 512 A maioria dos hardware" porque os HDDs estão usando ABCDEFGHIJKLMNABCDEFGHIJKLMN4 Os primeiros dias, embora as coisas tenham mudado com formato 4kn para o HDDS também. Abcdefghijklmn5 é o tamanho que OS vê, no real é um pouco maior para fazer algum espaço para o cabeçalho, ECC etc. O tamanho do setor físico no armazenamento flash é de nenhum uso para nós.


suas consultas:

.

Eu gostaria de saber se um determinado arquivo se move na memória flash (armazenamento interno), entre gravações / atualizações a ele.

Depende da definição de "mover" . No Armazenamento do Flash, mesmo que você não escreva em um arquivo, ele pode continuar mudando sua verdadeira localização física devido ao fundo g ária c Ollection; Um fenômeno controlado pela FTL internamente para reduzir o wa, para alcançar nivelamento de desgaste e para fornecer rendimento de alta gravação ( Programa Operações) por exclusão páginas inválidas no fundo ( apagamento operações).

.

Existe alguma maneira de obter o local do arquivo na memória flash (número do cluster, número do setor, etc.)?

Sim, você pode obter os endereços de blocos do sistema de arquivos de um arquivo que possuem um mapeamento linear com LBAs de dispositivo de bloco subjacente (partição). Mas esses endereços não são a localização real / física do arquivo na memória flash . No entanto, geralmente não se preocupa com a verdadeira localização física, a menos que algum forense ou recuperação de dados esteja envolvido.

exemplo

  ~# cat /sys/block/mmcblk0/queue/logical_block_size 512 ~# blockdev --getss /dev/block/by-name/cache 512 ~# tune2fs -l /dev/block/by-name/cache | grep 'Block size' Block size:               4096    

Assim, o tamanho do setor aqui é 512B enquanto o tamanho do bloco do sistema de arquivos é de 4kib. Vamos criar um arquivo de teste:

  ~# echo foobar >/cache/test_file ~# cat /cache/test_file foobar ~# filefrag -sv -b512 /cache/test_file Filesystem type is: ef53 File size of /cache/test_file is 7 (8 block of 512 bytes)  ext:     logical_offset:        physical_offset: length:   expected: flags:       0:        0..       7:     307200..    307207:      8:             last,eof /cache/test_file: 1 extent found    

* debugfs -R 'stat test_file' /dev/block/by-name/cache também pode ser usado no lugar de ABCDEFGHIJKLMNABCDEFGHIJKLMN9

File criado (de 7 bytes tamanho) ocupa 1 bloco do sistema de arquivos. low-level formatting0 Converte tamanho do bloco (4096b) para o tamanho do setor (512B). "Test_File" deve ser no setor 307200 th, mesmo para partição e sistema de arquivos, pois o sistema de arquivos ocupa uma partição inteira:

  low-level formatting1   

Vamos ler o arquivo diretamente da partição:

  low-level formatting2   

Está lá. Agora localize o arquivo desde o início do EMMC:

  low-level formatting3   

Portanto, mesmo se o sistema de arquivos e partição forem excluídos, você pode ler o arquivo (desde que ele não seja sobrescrito).

Vamos fazer mais algumas escavar:

  low-level formatting4   

O arquivo é excluído do sistema de arquivos, mas ainda ainda está lá. Vamos pedir FTL para excluí-lo permanentemente:

  low-level formatting5   

e se foi. Mas provavelmente ainda está lá em algum lugar em o ver- p espaço de rovisioning, programado para ser apagado no próximo gc , só nós não sabemos onde é.

nota:

  • low-level formatting6 em partições nuas é um assassino. Seja cauteloso!
  • low-level formatting7 e low-level formatting8 faz parte de e2fsprogs . low-level formatting9 não é enviado com o Android, construir da origem ou tente este < / a>. EXT_CSD0 é um applet busybox.

relacionado:

  • quando deve fstrim executar?
  • O que torna a recuperação de dados excluídos difíceis / impossível?

 

I assume by saying cluster you mean Windows' allocation unit, commonly called block in Linux world. It's a unit of data storage a filesystem uses. A cluster/block may consist of or correspond to multiple sectors on underlying storage media (HDD or flash storage). Sector is the minimum atomic unit of storage an OS can read or write. Block size is decided at the time of filesystem creation i.e. when we format a partition (high-level formatting). Partitions and filesystems make it easy to categorize and organize our data on the physical storage device.

HARD DISK DRIVES

"Sector" may refer to a physical sector or logical sector. In early days of HDDs there were only physical sectors created by dividing clusters/tracks on rotating disks into small parts. Cylinder/Head/Sector (CHS) has been a popular method of addressing before the Logical Block Addressing (LBA) was devised. Instead of directly dealing with physical sectors, OS now talks to disk controller firmware (through SATA/SCSI commands) referring an LBA number. Firmware in return maintains an LBA to CHS mapping itself, which includes ECC, G-list (disk's defect table) etc. This mapping (1:1 / sequenced / linear) (ref) is created during low-level formatting of disk drive when manufacturing, which never changes except if some sector is marked bad and remapped to some spare sector. So the OS / filesystem is aware of the physical geometry of the disk, which is propotional to the geometry of LBAs.

FLASH STORAGE

On flash media (SSDs, eMMC, UFS, SD cards etc.) there are no rotating disks and hence no cylinders. NAND flash is made of silicon cells, each cell consists of one (Single-Level-Cell), two (Multi-LC), three (Triple-LC) or four (Quad-LC) bits. Cells are grouped into pages (e.g. of 4KB) and pages into erase blocks (e.g. of 128 KB). LBAs to Physical Block Addresses mapping is fully controlled by Flash Translation Layer; a part of flash controller firmware. OS knows nothing about it, it can see at maximum the LBAs, not what's happening below it. Not even the ECC of failed memory cells, and that's why we don't realize the bad health of eMMC unless it fails, except by reading EXT_CSD (requires root) using mmc-utils or from /sys/class/mmc_host/*/*/life_time (if driver supports).

Since a page of memory can't be just overwritten unlike HDDs, a whole EraseBlock has to be Erased first before being Programmed (written). A side effect is that a number of pages are erased/re-written and the physical mapping changes even if a small file is edited. This unnecessary read-modify-write (RMW) is called Write Amplification. On HDDs, files aren't physically replaced unless shortened or elongated. OS is aware of these physical changes on HDD, but not on flash memory.

WHAT IS SECTOR?

So after all what we are concerned with is logical sector. Storage media informs the OS of its logical sector size but xe2x80x9cthe default of 512 covers most hardwarexe2x80x9d because HDDs have been using 512B from early days, though things have changed with 4Kn format for HDDs too. 512B is the size what OS sees, in actual it's a bit larger to make some room for header, ECC etc. Physical sector size on flash storage is of no use to us.


Your queries:

I would like to know if a certain file moves on the Flash memory (internal storage), between writes/updates to it.

It depends on the definition of xe2x80x9cmovexe2x80x9d. On flash storage, even if you don't write to a file, it may keep on changing its true physical location due to background Garbage Collection; a phenomenon controlled by FTL internally to reduce WA, to achieve Wear Leveling and to provide high write throughput (Program operations) by deleting invalid pages in background (Erase operations).

Is there some way I can get the file's location on the Flash memory (Cluster Number, Sector Number etc.)?

Yes you can get the filesystem block addresses of a file which have a linear mapping with LBAs of underlying block device (partition). But these addresses aren't the actual/physical file's location on the Flash memory. However usually one isn't concerned with true physical location unless some forensics or data recovery is involved.

EXAMPLE

~# cat /sys/block/mmcblk0/queue/logical_block_size 512 ~# blockdev --getss /dev/block/by-name/cache 512 ~# tune2fs -l /dev/block/by-name/cache | grep 'Block size' Block size:               4096 

So the sector size here is 512B while filesystem block size is 4KiB. Let's create a test file:

~# echo foobar >/cache/test_file ~# cat /cache/test_file foobar ~# filefrag -sv -b512 /cache/test_file Filesystem type is: ef53 File size of /cache/test_file is 7 (8 block of 512 bytes)  ext:     logical_offset:        physical_offset: length:   expected: flags:       0:        0..       7:     307200..    307207:      8:             last,eof /cache/test_file: 1 extent found 

* debugfs -R 'stat test_file' /dev/block/by-name/cache can also be used in place of filefrag

Created file (of 7 bytes size) occupies 1 filesystem block. -b 512 converts block size (4096B) to sector size (512B). "test_file" should be at 307200th sector, same for partition and filesystem because filesystem occupies whole partition:

~# blockdev --getsize64 /dev/block/by-name/cache | awk '$1 /= 4096' 65536 ~# tune2fs -l /dev/block/by-name/cache | grep 'Block count' Block count:              65536 

Let's read the file directly from partition:

~# dd if=/dev/block/by-name/cache skip=307200 count=1 | head -c7 foobar 

It's there. Now locate the file from the start of eMMC:

~# readlink /dev/block/by-name/cache /dev/block/mmcblk0p25 ~# cat /sys/block/mmcblk0/mmcblk0p25/start 7471104 ~# dd if=/dev/block/mmcblk0 skip=$(( 7471104 + 307200 )) count=1 | head -c7 foobar 

So even if filesystem and partition are deleted, you can read the file (provided that it's not overwritten).

Let's do some more digging:

~# rm /cache/test_file; sync; echo -n 1 >/proc/sys/vm/drop_caches ~# dd if=/dev/block/mmcblk0 skip=$(( 7471104 + 307200 )) count=1 | head -c7 foobar 

File is deleted from filesystem, but physically still there. Let's ask FTL to delete it permanently:

~# fstrim /cache; sync; echo -n 1 >/proc/sys/vm/drop_caches ~# dd if=/dev/block/mmcblk0 skip=$(( 7471104 + 307200 )) count=1 | head -c7 

And it's gone. But most probably it's still there somewhere in Over-Provisioning Space, scheduled to be Erased in next GC, just we don't know where it is.

Note:

  • dd on naked partitions is a killer. Be cautious!
  • tune2fs and filefrag are part of e2fsprogs. filefrag isn't shipped with Android, build from source or try this one. fstrim is a busybox applet.

RELATED:

  • When should fstrim run?
  • What makes recovery of deleted data difficult / impossible?
 
 

Perguntas relacionadas

1  Como posso verificar a localização de um arquivo (por exemplo, cluster ou setor #) no armazenamento interno?  ( How can i check the location of a file e g cluster or sector in the interna ) 
Eu gostaria de saber se eu determinado arquivo se move na memória flash (armazenamento interno), entre gravações / atualizações a ele. Há alguma maneira de ...

3  Onde devo instalar a Toybox?  ( Where should i install toybox ) 
Eu possuo um raízes Samsung Galaxy S Relay 4G Running Stock Android 4.1.2. Se você tem o Android 6.0 "Marshmallow" ou melhor, então você tem Toybox . Este ...

-2  Como posso fazer a pasta do sistema gravável sem enraizar?  ( How can i make the system folder writable without rooting ) 
meu dispositivo é Sprint Samsung Galaxy S III Número do modelo: SPH-L710 Eu quero fazer isso, porque quero parar o som do obturador da câmera. E eu nã...

0  Alterar arquivo (fotos, vídeos) Timestamp do nome do arquivo  ( Change file pictures videos timestamp from filename ) 
Ao mover arquivos em torno de DIP DIFERENTE DIFT e através do PC / Smartphone, o Timestamp para a data da última modificação geralmente é redefinido para o mu...

5  Como verificar o sistema de arquivos (/ sdcard) para erros?  ( How to check filesystem sdcard for errors ) 
Eu gostaria de verificar meu / sdcard, e possivelmente outras partições internas, para erros no nível do sistema de arquivos. Eu estou querendo saber como i...

3  Tipo de arquivo desconhecido contendo um vírus  ( Unknown file type containing a virus ) 
Vou tentar manter a história tão curta quanto possível, então você pode ter uma visão mais clara do que é a minha preocupação. Enquanto, eu estava navegando n...

30  Como posso ver a tabela de partição interna do Android?  ( How can i view the android internal partition table ) 
Eu enraizei meu dispositivo, coloque-o no modo de recuperação e ligue-o ao PC por adb shell < / a>. Como posso ver a lista de dispositivos de armazenamento...

29  Qual é o equivalente ao Android de / etc / fstab?  ( Whats the android equivalent of etc fstab ) 
Às vezes eu realmente gostaria que eles não tivessem bagunçado com o Linux muito! Eu sei que há um /etc/fstab em algum lugar, mas onde? Eu gostaria de mon...

0  Por que minha partição (desrotada) / dados parece estar vazia?  ( Why my unrooted data partition appears to be empty ) 
Eu estou tendo Alguns problemas com a partição My / Data. Entre outras coisas, quando navego em seu conteúdo com o Astro App, parece estar vazio. O telefone...

4  Quando o fstrim deve correr?  ( When should fstrim run ) 
com base nisso cyanogenmod fórum thread , eu tentei Para resolver o atraso em executar aplicativos e alternar entre aplicativos no meu Galaxy Nexus executand...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.