How to clear a removed single-disk pool from being listed by zpool import?
On an OmniOS server, I removed a single-disk pool I was using for testing.
Now, when I run zpool import it will show it as FAULTED, since that single disk not available anymore.
Code:
# zpool import
pool: fido
id: 7452075738474086658
state: FAULTED
status: The pool was last accessed by another system.
action: The pool cannot be imported due to damaged devices or data.
The pool may be active on another system, but can be imported using
the '-f' flag.
see: http://illumos.org/msg/ZFS-8000-EY
config:
fido FAULTED corrupted data
c1t0025385971B16535d0 UNAVAIL corrupted data
Since it is not there, I cannot destroy the pool.
I tried deleting /etc/zfs/zpool.cache and rebooting, with no success, the entry is still there.
I also cannot re-attach the disk in order to destroy the pool, since it is not physically in my possession anymore.
How can I clear that entry from being considered by zpool import?
I read zpool man page, and Solaris pages, like this one, but I could not find any hint.
Last edited by priyadarshan; 08-11-2018 at 12:59 PM..
Reason: Add details
Previously , i remove the disk by
#vxdg -g testdg -k rmdisk testdg02
But i got error when i -k adddisk
bash-2.03# vxdisk list
DEVICE TYPE DISK GROUP STATUS
c0t0d0s2 auto:none - - online invalid
c0t1d0s2 auto:none ... (1 Reply)
# zpool import
pool: emcpool1
id: 5596268873059055768
state: UNAVAIL
status: One or more devices are missing from the system.
action: The pool cannot be imported. Attach the missing
devices and try again.
see: Sun Message ID: ZFS-8000-3C
config:
emcpool1 ... (7 Replies)
Hello, I have a problem on my backup server. I lost my system hdd and my separate ZIL device while the system crashs and now I'm in trouble. The old system was running under the least version of osol/dev (snv_134) with zfs v22.
After the server crashs I was very optimistic of solving the problems... (2 Replies)
I am trying to test simple zfs functionality on a FreeBSD 8.2 VM. When I try to run a 'zpool create' I receive the following error:
# zpool create zfspool /dev/da0s1a
cannot create 'zfspool': no such pool or dataset
# zpool create zfspool /dev/da0
cannot create 'zfspool': no such pool or... (3 Replies)
Hi guys, I appreciate any help in this regard, we have lost sensitive data in the company.
One box with 2 disk mirrored and a 3ware controller handling 13 disks in a raidz2 pool. Suddenly the box restart and keeps "Reading ZFS config" for hours.
Unplugging disk by disk we isolate the disk... (3 Replies)
Hi Guys,
I have a single ZFS pool with 2 disk which is mirrored if i create a new BE with lucreate should i specify which disk where the new BE should be created? (7 Replies)
Hi,
Quick question.
I have a data zpool that consists of 1 disk.
pool: data
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
c0t50002AC0014B06BEd0 ONLINE... (2 Replies)
A backup/clone script of ours was recently ran. It normally only clones the rpool and renames in rpoolA. Something must've changed as it found another one of our pools that it shouldn't have. It exported that pool unbeknownst to us. Later on when a coworker realized the other pool was missing he... (2 Replies)
I have a single zpool with 3 2-way mirrors ( 3 x 2 way vdevs) it has a degraded disk in mirror-2, I know I can suffer a single drive failure, but looking at this how many drive failures can this suffer before it is no good? On the face of it, I thought that I could lose a further 2 drives in each... (4 Replies)
issue,
I had a zpool which was full
pool_temp1 199G 197G 1.56G 99% ONLINE -
pool_temp2 199G 196G 3.09G 98% ONLINE -
as you can see, full
so I replaced with a larger disk.
zpool replace pool_temp1 c3t600144F0FF8BA036000058CC1DB80008d0s0... (2 Replies)
Discussion started by: rrodgers
2 Replies
LEARN ABOUT CENTOS
libtalloc_pools
libtalloc_pools(3) talloc libtalloc_pools(3)NAME
libtalloc_pools - Chapter 5: Memory pools
Memory pools
Allocation of a new memory is an expensive operation and large programs can contain thousands of calls of malloc() for a single
computation, where every call allocates only a very small amount of the memory. This can result in an undesirable slowdown of the
application. We can avoid this slowdown by decreasing the number of malloc() calls by using a memory pool.
A memory pool is a preallocated memory space with a fixed size. If we need to allocate new data we will take the desired amount of the
memory from the pool instead of requesting a new memory from the system. This is done by creating a pointer that points inside the
preallocated memory. Such a pool must not be reallocated as it would change its location - pointers that were pointing inside the pool
would become invalid. Therefore, a memory pool requires a very good estimate of the required memory space.
The talloc library contains its own implementation of a memory pool. It is highly transparent for the programmer. The only thing that needs
to be done is an initialization of a new pool context using talloc_pool() - which can be used in the same way as any other context.
Refactoring of existing code (that uses talloc) to take the advantage of a memory pool is quite simple due to the following properties of
the pool context:
o if we are allocating data on a pool context, it takes the desired amount of memory from the pool,
o if the context is a descendant of the pool context, it takes the space from the pool as well,
o if the pool does not have sufficient portion of memory left, it will create a new non-pool context, leaving the pool intact
/* allocate 1KiB in a pool */
TALLOC_CTX *pool_ctx = talloc_pool(NULL, 1024);
/* Take 512B from the pool, 512B is left there */
void *ptr = talloc_size(pool_ctx, 512);
/* 1024B > 512B, this will create new talloc chunk outside
the pool */
void *ptr2 = talloc_size(ptr, 1024);
/* The pool still contains 512 free bytes
* this will take 200B from them. */
void *ptr3 = talloc_size(ptr, 200);
/* This will destroy context 'ptr3' but the memory
* is not freed, the available space in the pool
* will increase to 512B. */
talloc_free(ptr3);
/* This will free memory taken by 'pool_ctx'
* and 'ptr2' as well. */
talloc_free(pool_ctx);
The above given is very convenient, but there is one big issue to be kept in mind. If the parent of a talloc pool child is changed to a
parent that is outside of this pool, the whole pool memory will not be freed until the child is freed. For this reason we must be very
careful when stealing a descendant of a pool context.
TALLOC_CTX *mem_ctx = talloc_new(NULL);
TALLOC_CTX *pool_ctx = talloc_pool(NULL, 1024);
struct foo *foo = talloc(pool_ctx, struct foo);
/* mem_ctx is not in the pool */
talloc_steal(mem_ctx, foo);
/* pool_ctx is marked as freed but the memory is not
deallocated, accessing the pool_ctx again will cause
an error */
talloc_free(pool_ctx);
/* This deallocates the pool_ctx. */
talloc_free(mem_ctx);
It may often be better to copy the memory we want instead of stealing it to avoid this problem. If we do not need to retain the context
name (to keep the type information), we can use talloc_memdup() to do this.
Copying the memory out of the pool may, however, discard all the performance boost given by the pool, depending on the size of the copied
memory. Therefore, the code should be well profiled before taking this path. In general, the golden rule is: if we need to steal from the
pool context, we should not use a pool context.
Version 2.0 Tue Jun 17 2014 libtalloc_pools(3)